elasticsearch v1.0.0 Elasticsearch View Source
Entry-point for interacting with your Elasticsearch cluster(s).
You should configure at least one Elasticsearch.Cluster
in order to
use the functions in this module, or else you’ll need to pass all the
configuration for the cluster into each function call.
Link to this section Summary
Functions
Same as delete/1
, but returns the response and raises errors
Deletes data at a given Elasticsearch URL
Same as delete_document/2
, but raises on errors
Deletes a document from a given index
The same as get/1
, but returns the response instead of a tuple. Raises on
errors
Gets the contents of a path from the Elasticsearch API
The same as post/1
, but returns the response. Raises on errors
Posts data or queries to a given Elasticsearch path
Creates a document in a given index. Use this function when your documents do not have IDs or you want to use Elasticsearch’s automatic ID generation
The same as put/2
, but returns the response instead of a tuple. Raises on
errors
Puts data to a given Elasticsearch API path
Same as put_document/2
, but raises on errors
Creates or updates a document in a given index
Waits for a given Elasticsearch cluster to be available
Link to this section Types
response() :: {:ok, map()} | {:error, Elasticsearch.Exception.t()}
Link to this section Functions
delete!(Elasticsearch.Cluster.t(), url(), opts()) :: map() | no_return()
Same as delete/1
, but returns the response and raises errors.
Examples
iex> Index.create_from_file(Cluster, "posts", "test/support/settings/posts.json")
...> Elasticsearch.delete!(Cluster, "/posts")
%{"acknowledged" => true}
Raises an error if the resource is invalid.
iex> Elasticsearch.delete!(Cluster, "/nonexistent")
** (Elasticsearch.Exception) (index_not_found_exception) no such index
delete(Elasticsearch.Cluster.t(), url(), opts()) :: response()
Deletes data at a given Elasticsearch URL.
Examples
iex> Index.create_from_file(Cluster, "posts", "test/support/settings/posts.json")
...> Elasticsearch.delete(Cluster, "/posts")
{:ok, %{"acknowledged" => true}}
It returns an error if the given resource does not exist.
iex> Elasticsearch.delete(Cluster, "/nonexistent")
{:error,
%Elasticsearch.Exception{col: nil, line: nil,
message: "no such index", query: nil,
raw: %{"error" => %{"index" => "nonexistent",
"index_uuid" => "_na_", "reason" => "no such index",
"resource.id" => "nonexistent",
"resource.type" => "index_or_alias",
"root_cause" => [%{"index" => "nonexistent",
"index_uuid" => "_na_", "reason" => "no such index",
"resource.id" => "nonexistent",
"resource.type" => "index_or_alias",
"type" => "index_not_found_exception"}],
"type" => "index_not_found_exception"}, "status" => 404},
status: 404, type: "index_not_found_exception"}}
delete_document!( Elasticsearch.Cluster.t(), Elasticsearch.Document.t(), index_name() ) :: map() | no_return()
Same as delete_document/2
, but raises on errors.
Example
iex> Index.create_from_file(Cluster, "posts-1", "test/support/settings/posts.json")
...> struct = %Post{id: 123, title: "Post", author: "Author"}
...> Elasticsearch.put_document!(Cluster, struct, "posts-1")
...> Elasticsearch.delete_document!(Cluster, struct, "posts-1")
%{
"_id" => "123",
"_index" => "posts-1",
"_primary_term" => 1,
"_seq_no" => 1,
"_shards" => %{"failed" => 0, "successful" => 1, "total" => 2},
"_type" => "_doc",
"_version" => 2,
"result" => "deleted"
}
delete_document( Elasticsearch.Cluster.t(), Elasticsearch.Document.t(), index_name() ) :: response()
Deletes a document from a given index.
The document must implement the Elasticsearch.Document
protocol.
Example
iex> Index.create_from_file(Cluster, "posts-1", "test/support/settings/posts.json")
...> struct = %Post{id: 123, title: "Post", author: "Author"}
...> Elasticsearch.put_document!(Cluster, struct, "posts-1")
...> Elasticsearch.delete_document(Cluster, struct, "posts-1")
{:ok,
%{
"_id" => "123",
"_index" => "posts-1",
"_primary_term" => 1,
"_seq_no" => 1,
"_shards" => %{"failed" => 0, "successful" => 1, "total" => 2},
"_type" => "_doc",
"_version" => 2,
"result" => "deleted"
}}
get!(Elasticsearch.Cluster.t(), url(), opts()) :: map() | no_return()
The same as get/1
, but returns the response instead of a tuple. Raises on
errors.
Examples
iex> resp = Elasticsearch.get!(Cluster, "/_cat/health?format=json")
...> is_list(resp)
true
iex> Elasticsearch.get!(Cluster, "/nonexistent")
** (Elasticsearch.Exception) (index_not_found_exception) no such index
get(Elasticsearch.Cluster.t(), url(), opts()) :: response()
Gets the contents of a path from the Elasticsearch API.
Examples
iex> {:ok, resp} = Elasticsearch.get(Cluster, "/_cat/health?format=json")
...> is_list(resp)
true
iex> Elasticsearch.get(Cluster, "/nonexistent")
{:error,
%Elasticsearch.Exception{col: nil, line: nil,
message: "no such index", query: nil,
raw: %{"error" => %{"index" => "nonexistent",
"index_uuid" => "_na_", "reason" => "no such index",
"resource.id" => "nonexistent",
"resource.type" => "index_or_alias",
"root_cause" => [%{"index" => "nonexistent",
"index_uuid" => "_na_", "reason" => "no such index",
"resource.id" => "nonexistent",
"resource.type" => "index_or_alias",
"type" => "index_not_found_exception"}],
"type" => "index_not_found_exception"}, "status" => 404},
status: 404, type: "index_not_found_exception"}}
The same as post/1
, but returns the response. Raises on errors.
Examples
iex> Index.create_from_file(Cluster, "posts", "test/support/settings/posts.json")
...> query = %{"query" => %{"match_all" => %{}}}
...> resp = Elasticsearch.post!(Cluster, "/posts/_search", query)
...> is_map(resp)
true
Raises an error if the path is invalid or another error occurs:
iex> query = %{"query" => %{"match_all" => %{}}}
...> Elasticsearch.post!(Cluster, "/nonexistent/_search", query)
** (Elasticsearch.Exception) (index_not_found_exception) no such index
post(Elasticsearch.Cluster.t(), url(), data(), opts()) :: response()
Posts data or queries to a given Elasticsearch path.
Examples
iex> Index.create_from_file(Cluster, "posts", "test/support/settings/posts.json")
...> query = %{"query" => %{"match_all" => %{}}}
...> {:ok, resp} = Elasticsearch.post(Cluster, "/posts/_search", query)
...> resp["hits"]["hits"]
[]
post_document( Elasticsearch.Cluster.t(), Elasticsearch.Document.t(), index_name() ) :: response()
Creates a document in a given index. Use this function when your documents do not have IDs or you want to use Elasticsearch’s automatic ID generation.
https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-index_.html#_automatic_id_generation
The document must implement the Elasticsearch.Document
. protocol.
Example
Index.create_from_file(Cluster, "posts-1", "test/support/settings/posts.json")
Elasticsearch.post_document(Cluster, %Post{title: "Post"}, "posts-1")
# => {:ok,
# => %{
# => "_id" => "W0tpsmIBdwcYyG50zbta",
# => "_index" => "posts-1",
# => "_primary_term" => 1,
# => "_seq_no" => 0,
# => "_shards" => %{"failed" => 0, "successful" => 1, "total" => 2},
# => "_type" => "_doc",
# => "_version" => 1,
# => "result" => "created"
# => }}
The same as put/2
, but returns the response instead of a tuple. Raises on
errors.
Examples
iex> Index.create_from_file(Cluster, "posts", "test/support/settings/posts.json")
...> Elasticsearch.put!(Cluster, "/posts/_doc/id", %{"name" => "name", "author" => "author"})
%{
"_id" => "id",
"_index" => "posts",
"_primary_term" => 1,
"_seq_no" => 0,
"_shards" => %{"failed" => 0, "successful" => 1, "total" => 2},
"_type" => "_doc",
"_version" => 1,
"result" => "created"
}
iex> Elasticsearch.put!(Cluster, "/bad/url", %{"data" => "here"})
** (Elasticsearch.Exception) Incorrect HTTP method for uri [/bad/url] and method [PUT], allowed: [POST]
put(Elasticsearch.Cluster.t(), url(), data(), opts()) :: response()
Puts data to a given Elasticsearch API path.
Examples
iex> Index.create_from_file(Cluster, "posts-1", "test/support/settings/posts.json")
...> Elasticsearch.put(Cluster, "/posts-1/_doc/id", %{"title" => "title", "author" => "author"})
{:ok,
%{
"_id" => "id",
"_index" => "posts-1",
"_primary_term" => 1,
"_seq_no" => 0,
"_shards" => %{"failed" => 0, "successful" => 1, "total" => 2},
"_type" => "_doc",
"_version" => 1,
"result" => "created"
}}
iex> Elasticsearch.put(Cluster, "/bad/url", %{"title" => "title", "author" => "author"})
{:error,
%Elasticsearch.Exception{col: nil, line: nil,
message: "Incorrect HTTP method for uri [/bad/url] and method [PUT], allowed: [POST]",
query: nil, raw: nil, status: nil, type: nil}}
put_document!( Elasticsearch.Cluster.t(), Elasticsearch.Document.t(), index_name() ) :: map() | no_return()
Same as put_document/2
, but raises on errors.
Example
iex> Index.create_from_file(Cluster, "posts-1", "test/support/settings/posts.json")
...> struct = %Post{id: 123, title: "Post", author: "Author"}
...> Elasticsearch.put_document!(Cluster, struct, "posts-1")
%{
"_id" => "123",
"_index" => "posts-1",
"_primary_term" => 1,
"_seq_no" => 0,
"_shards" => %{"failed" => 0, "successful" => 1, "total" => 2},
"_type" => "_doc",
"_version" => 1,
"result" => "created"
}
put_document( Elasticsearch.Cluster.t(), Elasticsearch.Document.t(), index_name() ) :: response()
Creates or updates a document in a given index.
The document must implement the Elasticsearch.Document
protocol.
Example
iex> Index.create_from_file(Cluster, "posts-1", "test/support/settings/posts.json")
...> struct = %Post{id: 123, title: "Post", author: "Author"}
...> Elasticsearch.put_document(Cluster, struct, "posts-1")
{:ok,
%{
"_id" => "123",
"_index" => "posts-1",
"_primary_term" => 1,
"_seq_no" => 0,
"_shards" => %{"failed" => 0, "successful" => 1, "total" => 2},
"_type" => "_doc",
"_version" => 1,
"result" => "created"
}}
Waits for a given Elasticsearch cluster to be available.
It will try a given number of times, with 1sec delay between tries.