View Source ExTypesense.Search (ExTypesense v0.6.0)

Module for searching documents.

Summary

Types

Link to this type

response()

View Source (since 0.1.0)
@type response() :: {:ok, map()} | {:error, map()}

Functions

Link to this function

multi_search(conn \\ Connection.new(), searches)

View Source (since 0.3.0)
@spec multi_search(ExTypesense.Connection.t(), [map()]) :: response()

Perform multiple/federated searches at once. Search params can be found here.

This is especially useful to avoid round-trip network latencies incurred otherwise if each of these requests are sent in separate HTTP requests.

You can also use this feature to do a federated search across multiple collections in a single HTTP request. For eg: in an ecommerce products dataset, you can show results from both a "products" collection, and a "brands" collection to the user, by searching them in parallel with a multi_search request.

Examples

iex> searches = [
...>   %{collection: "companies", q: "Loca Cola"},
...>   %{collection: Company, q: "Burgler King"},
...>   %{collection: Catalog, q: "umbrella"}
...> ]
iex> ExTypesense.multi_search(searches)
{:ok,
 [
   %{
     "facet_counts" => [],
     "found" => 0,
     "hits" => [],
     "out_of" => 0,
     "page" => 1,
     "request_params" => %{
       "collection_name" => "companies",
       "per_page" => 10,
       "q" => "Loca Cola"
     },
     "search_cutoff" => false,
     "search_time_ms" => 5
   },
   %{
     "facet_counts" => [],
     "found" => 0,
     "hits" => [],
     "out_of" => 0,
     "page" => 1,
     "request_params" => %{
       "collection_name" => "companies",
       "per_page" => 10,
       "q" => "Burgler King"
     },
     "search_cutoff" => false,
     "search_time_ms" => 5
   },
   %{
     "facet_counts" => [],
     "found" => 0,
     "hits" => [],
     "out_of" => 0,
     "page" => 1,
     "request_params" => %{
       "collection_name" => "companies",
       "per_page" => 10,
       "q" => "umbrella"
     },
     "search_cutoff" => false,
     "search_time_ms" => 5
   }
 ]
}
Link to this function

multi_search_ecto(conn \\ Connection.new(), searches)

View Source (since 0.3.0)
@spec multi_search_ecto(ExTypesense.Connection.t(), [map()]) :: Ecto.Query.t()
Link to this function

search(conn \\ Connection.new(), module_or_collection_name, params)

View Source (since 0.1.0)
@spec search(ExTypesense.Connection.t(), module() | String.t(), map()) ::
  Ecto.Query.t() | response()

Search from a document or Ecto Schema. Search params can be found here.

Examples

iex> params = %{q: "umbrella", query_by: "title,description"}
iex> ExTypesense.search(Catalog, params)
{:ok,
 %{
  "facet_counts" => [],
  "found" => 0,
  "hits" => [],
  "out_of" => 0,
  "page" => 1,
  "request_params" => %{
    "collection_name" => "catalogs",
    "per_page" => 10,
    "q" => "umbrella"
  },
  "search_cutoff" => false,
  "search_time_ms" => 5
 }
}

iex> params = %{q: "umbrella", query_by: "title,description"}
iex> ExTypesense.search("catalogs", params)
{:ok,
 %{
  "facet_counts" => [],
  "found" => 0,
  "hits" => [],
  "out_of" => 0,
  "page" => 1,
  "request_params" => %{
    "collection_name" => "catalogs",
    "per_page" => 10,
    "q" => "umbrella"
  },
  "search_cutoff" => false,
  "search_time_ms" => 5
 }
}