elasticsearch v0.3.1 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
Deletes data at a given Elasticsearch URL
Same as delete/1
, but returns the response and raises errors
Deletes a document from a given index
Same as delete_document/2
, but raises on errors
Gets the contents of a path from the Elasticsearch API
The same as get/1
, but returns the response instead of a tuple. Raises on
errors
Posts data or queries to a given Elasticsearch path
The same as post/1
, but returns the response. Raises on errors
Puts data to a given Elasticsearch API path
The same as put/2
, but returns the response instead of a tuple. Raises on
errors
Creates or updates a document in a given index
Same as put_document/2
, but raises on errors
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()) :: 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!(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_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"
}}
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"
}
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"}}
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
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!(Elasticsearch.Cluster.t(), url(), data(), opts()) :: map() | no_return()
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
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!(Elasticsearch.Cluster.t(), url(), data(), opts()) :: map() | no_return()
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_document(Elasticsearch.Cluster.t(), Elasticsearch.Document.t(), index_name()) :: response()
put_document(Elasticsearch.Cluster.t(), Elasticsearch.Document.t(), index_name()) :: map() | no_return()
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"
}}
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"
}
Waits for a given Elasticsearch cluster to be available.
It will try a given number of times, with 1sec delay between tries.