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

Link to this section Functions

Link to this function delete!(cluster, url, opts \\ []) View Source
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
Link to this function delete(cluster, url, opts \\ []) View Source
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"}}
Link to this function delete_document!(cluster, document, index) View Source

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"
}
Link to this function delete_document(cluster, document, index) View Source

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"
  }}
Link to this function get!(cluster, url, opts \\ []) View Source
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
Link to this function get(cluster, url, opts \\ []) View Source

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"}}
Link to this function post!(cluster, url, data, opts \\ []) View Source
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
Link to this function post(cluster, url, data, opts \\ []) View Source
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"]
[]
Link to this function post_document(cluster, document, index) View Source

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"
# =>   }}
Link to this function put!(cluster, url, data, opts \\ []) View Source
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]
Link to this function put(cluster, url, data, opts \\ []) View Source

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}}
Link to this function put_document!(cluster, document, index) View Source

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"
}
Link to this function put_document(cluster, document, index) View Source

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"
  }}
Link to this function wait_for_boot(cluster, tries, count \\ 0) View Source

Waits for a given Elasticsearch cluster to be available.

It will try a given number of times, with 1sec delay between tries.