View Source ExTypesense.Search (ExTypesense v0.6.0)
Module for searching documents.
Summary
Functions
Perform multiple/federated searches at once. Search params can be found here.
Search from a document or Ecto Schema. Search params can be found here.
Types
Functions
@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
}
]
}
multi_search_ecto(conn \\ Connection.new(), searches)
View Source (since 0.3.0)@spec multi_search_ecto(ExTypesense.Connection.t(), [map()]) :: Ecto.Query.t()
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
}
}