Last active
January 29, 2017 09:54
-
-
Save radzserg/571e07307298909367ee22245489f2d8 to your computer and use it in GitHub Desktop.
An example of low level client
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| defmodule App.Es.EsClient do | |
| @config Application.get_env(:app, :es) | |
| @doc """ | |
| Builds index/type/id|action URL. Like index-prefix/index/id|action | |
| """ | |
| def build_url(index, id_or_action \\ nil, type \\ nil) do | |
| host = @config[:host] | |
| index_prefix = @config[:index_prefix] | |
| type = case type do | |
| nil -> "/#{index}" | |
| false -> "" | |
| type -> "/#{type}" | |
| end | |
| url = "#{host}/#{index_prefix}#{index}#{type}" | |
| if id_or_action, do: "#{url}/#{id_or_action}", else: url | |
| end | |
| @doc """ | |
| Upsert - insert or update document if it exists in db | |
| """ | |
| def upsert(index, id, body) do | |
| url = build_url(index, id) | |
| result = request!(:put, url, encode!(body)) | |
| result = decode!(result.body) | |
| {:ok, result} | |
| end | |
| @doc """ | |
| Check if index exists | |
| """ | |
| def index_exists?(index) do | |
| url = build_url(index) | |
| result = request!(:head, url) | |
| case result.status_code do | |
| 404 -> false | |
| 200 -> true | |
| end | |
| end | |
| @doc """ | |
| Delete ES index | |
| """ | |
| def delete_index(index) do | |
| result = request!(:delete, build_url(index, nil, false)) | |
| case result.status_code do | |
| 200 -> {:ok, decode!(result.body)} | |
| _ -> {:error, decode!(result.body)} | |
| end | |
| end | |
| @doc """ | |
| Put mapping for idnex | |
| """ | |
| def put_mapping(index, mapping) do | |
| url = build_url(index, nil, false) | |
| result = request!(:put, url, encode!(%{mappings: mapping})) | |
| case result.status_code do | |
| 200 -> {:ok, decode!(result.body)} | |
| _ -> {:error, decode!(result.body)} | |
| end | |
| end | |
| @doc """ | |
| Search in index | |
| """ | |
| def search(index, payload \\ %{}) do | |
| url = build_url(index, "_search") | |
| result = request!(:get, url, encode!(payload)) | |
| case result.status_code do | |
| 200 -> {:ok, decode!(result.body)} | |
| _ -> {:error, decode!(result.body)} | |
| end | |
| end | |
| defp document_exists?(index, id) do | |
| url = build_url(index, id) | |
| result = request!(:head, url) | |
| case result.status_code do | |
| 404 -> false | |
| 200 -> true | |
| end | |
| end | |
| defp encode!(data), do: Poison.encode!(data) | |
| defp decode!(data), do: Poison.decode!(data) | |
| defp requets!(method, url, payload), do: HTTPoison.request!(method, url, payload) | |
| end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment