Elastic v1.0.0 Elastic.Document.API

The Document API provides some helpers for interacting with documents.

The Document API extracts away a lot of the repetition of querying / indexing of a particular index. Here’s an example:

defmodule Answer do
  @es_type "answer"
  @es_index "answer"
  use Elastic.Document.API

  defstruct id: nil, text: []
end

Index

Then you can index a new Answer by doing:

Answer.index(1, %{text: "This is an answer"})

Searching

The whole point of Elastic Search is to search for things, and there’s a function for that:

Answer.search(%{
  query: %{
    match: %{text: "answer"}
  },
})

The query syntax is exactly like the JSON you’ve come to know and love from using Elastic Search, except it’s Elixir maps.

Counting

Counting works the same as searching, but instead of returning all the hits, it’ll return a number.

Answer.count(%{
  query: %{
    match: %{text: "answer"}
  },
})

Get

And you can get that answer with:

Answer.get(1)

This will return an Answer struct:

%Answer{text: "This is an answer"}

Raw Get

If you want the raw result, use raw_get instead:

Answer.raw_get(1)

This returns the raw data from Elastic Search, without the wrapping of the struct:

{:ok, 200,
 %{"_id" => "1", "_index" => "answer",
   "_source" => %{"text" => "This is an answer"}, "_type" => "answer", "_version" => 1,
   "found" => true}
 }
}

Updating

You can update the answer by using update (or index, since update is just an “alias”)

Answer.update(1, %{text: "This is an answer"})

Deleting

Deleting a document from the index is as easy as:

Answer.delete(1)