- Notifications
You must be signed in to change notification settings - Fork73
A simple Elasticsearch REST client written in Elixir.
License
werbitzky/elastix
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
A DSL-free Elasticsearch client for Elixir.
Even though thedocumentation is pretty scarce right now, we're working on improving it. If you want to help with that you're definitely welcome. 🤗
This README contains most of the information you should need to get started, if you can't find what you're looking for, either look at the tests or file an issue!
Add:elastix
to your list of dependencies inmix.exs
:
defdepsdo[{:elastix,">= 0.0.0"}]end
Then runmix deps.get
to fetch the new dependency.
Elastix.Index.create("http://localhost:9200","twitter",%{})
elastic_url="http://localhost:9200"data=%{user:"kimchy",post_date:"2009-11-15T14:12:12",message:"trying out Elastix"}mapping=%{properties:%{user:%{type:"text"},post_date:%{type:"date"},message:%{type:"text"}}}Elastix.Mapping.put(elastic_url,"twitter","tweet",mapping)Elastix.Document.index(elastic_url,"twitter","tweet","42",data)Elastix.Search.search(elastic_url,"twitter",["tweet"],%{})Elastix.Document.delete(elastic_url,"twitter","tweet","42")
Bulk requests take as parameter a list of the lines you want to send to the_bulk
endpoint.
You can also specify the following options:
index
the index of the requesttype
the document type of the request.(you can't specifytype
without specifyingindex
)httpoison_options
configuration directly passed to httpoison methods. Same options that can be passed on config file
lines=[%{index:%{_id:"1"}},%{field:"value1"},%{index:%{_id:"2"}},%{field:"value2"}]Elastix.Bulk.post(elastic_url,lines,index:"my_index",type:"my_type",httpoison_options:[timeout:180_000])# You can also send raw data:data=Enum.map(lines,fnline->Poison.encode!(line)<>"\n"end)Elastix.Bulk.post_raw(elastic_url,data,index:"my_index",type:"my_type")
config:elastix,shield:true,username:"username",password:"password",
config:elastix,json_options:[keys::atoms!],httpoison_options:[hackney:[pool::elastix_pool]]
Note that you can configure Elastix to use any JSON library, see the"Custom JSON codec" page for more info.
config:elastix,custom_headers:{MyModule,:add_aws_signature,["us-east"]}
custom_headers
must be a tuple of the type{Module, :function, [args]}
, where:function
is a function that should accept the request (a map of this type:%{method: String.t, headers: [], url: String.t, body: String.t}
) as its first parameter and return a list of the headers you want to send:
defmoduleMyModuledodefadd_aws_signature(request,region)do[{"Authorization",generate_aws_signature(request,region)}|request.headers]enddefpgenerate_aws_signature(request,region)do# See: https://github.com/bryanjos/aws_auth or similarendend
You need Elasticsearch running locally on port 9200. A quick way of doing so is via Docker:
$ docker run -p 9200:9200 -it --rm elasticsearch:5.1.2
Then clone the repo and fetch its dependencies:
$ git clone git@github.com:werbitzky/elastix.git$ cd elastix$ mix deps.get$ mix test
About
A simple Elasticsearch REST client written in Elixir.