Hui v0.5.3 Hui View Source

Hui 辉 (“shine” in Chinese) is an Elixir client and library for Solr enterprise search platform.

Usage

Link to this section Summary

Functions

Issue a search query to the default Solr endpoint

Issue a structured query and faceting request to the default Solr endpoint

Issue a search query to a specific Solr endpoint

Issue a structured query and faceting request to a specific Solr endpoint

Link to this section Types

Link to this section Functions

Link to this function browse(url, fields) View Source
browse(url(), [binary()]) ::
  {:ok, HTTPoison.Response.t()}
  | {:error, HTTPoison.Error.t()}
  | {:error, String.t()}
Link to this function q(query) View Source
q(binary() | query()) ::
  {:ok, HTTPoison.Response.t()}
  | {:error, HTTPoison.Error.t()}
  | {:error, String.t()}

Issue a search query to the default Solr endpoint.

The query can be a string, a keyword list or query struct (t:Hui.Q.t/0). This function is a shortcut for search/2 with :default as URL key.

Example

  Hui.q("scott") # keyword search
  Hui.q(%Hui.Q{q: "loch", fq: ["type:illustration", "format:image/jpeg"]})
  Hui.q(q: "loch", rows: 5, facet: true, "facet.field": ["year", "subject"])

See Hui.URL.default_url!/0 and Hui.URL.encode_query/1 for more details on Solr parameter structs and keyword list.

Issue a structured query and faceting request to the default Solr endpoint.

The query consists of a query struct (t:Hui.Q.t/0) and a faceting struct (t:Hui.F.t/0).

Example

  Hui.q(%Hui.Q{q: "author:I*", rows: 5}, %Hui.F{field: ["cat", "author_str"], mincount: 1})

See Hui.Q, Hui.F, Hui.URL.encode_query/1 for more details on query structs.

Link to this function search(url, q) View Source
search(url(), query()) ::
  {:ok, HTTPoison.Response.t()}
  | {:error, HTTPoison.Error.t()}
  | {:error, String.t()}

Issue a search query to a specific Solr endpoint.

The endpoint can either be a string URL or Hui.URL.t/0 struct which defines a specific URL and request handler. A key referring to a configured endpoint can also be used.

The query is a struct (Hui.Q) or a keyword list of Solr parameters.

Example - parameters

  # structured query with permitted or quality Solr parameters
  Hui.search(url, %Hui.Q{q: "loch", rows: 5, wt: "xml", fq: ["type:illustration", "format:image/jpeg"]})
  # a keyword list of arbitrary parameters
  Hui.search(url, q: "edinburgh", rows: 10)

Example - URL endpoints

  url = "http://localhost:8983/solr/collection"
  Hui.search(url, q: "loch")

  url = :library
  Hui.search(url, q: "edinburgh", rows: 10)

  url = %Hui.URL{url: "http://localhost:8983/solr/collection", handler: "suggest"}
  Hui.search(url, suggest: true, "suggest.dictionary": "mySuggester", "suggest.q": "el")

See Hui.URL.configured_url/1 amd Hui.URL.encode_query/1 for more details on Solr parameter keyword list.

Hui.URL.t/0 struct also enables HTTP headers and HTTPoison options to be specified in keyword lists. HTTPoison options provide further controls for a request, e.g. timeout, recv_timeout, max_redirect, params etc.

  # setting up a header and a 10s receiving connection timeout
  url = %Hui.URL{url: "..", headers: [{"accept", "application/json"}], options: [recv_timeout: 10000]}
  Hui.search(url, q: "solr rocks")

See HTTPoison.request/5 for more details on HTTPoison options.

Link to this function search(url, q, f) View Source
search(url(), Hui.Q.t(), Hui.F.t()) ::
  {:ok, HTTPoison.Response.t()}
  | {:error, HTTPoison.Error.t()}
  | {:error, String.t()}

Issue a structured query and faceting request to a specific Solr endpoint.

The endpoint can be a string URL, a Hui.URL.t/0 struct (for HTTP headers and options) which defines a specific URL and request handler or a key referring to a configured endpoint.

The query consists of a query struct (t:Hui.Q.t/0) and a faceting struct (t:Hui.F.t/0).

Example

  x = %Hui.Q{q: "author:I*", rows: 5}
  y = %Hui.F{field: ["cat", "author_str"], mincount: 1}
  Hui.search(:library, x, y)

  x = %Hui.Q{q: "*", rows: 5}
  range1 = %Hui.F.Range{range: "price", start: 0, end: 100, gap: 10, per_field: true}
  range2 = %Hui.F.Range{range: "popularity", start: 0, end: 5, gap: 1, per_field: true}
  y = %Hui.F{field: ["cat", "author_str"], mincount: 1, range: [range1, range2]}
  Hui.search(:default, x, y)

The above Hui.search(:default, x, y) example issues a request that resulted in the following Solr response header showing the corresponding generated and encoded parameters.

"responseHeader" => %{
  "QTime" => 106,
  "params" => %{
    "f.popularity.facet.range.end" => "5",
    "f.popularity.facet.range.gap" => "1",
    "f.popularity.facet.range.start" => "0",
    "f.price.facet.range.end" => "100",
    "f.price.facet.range.gap" => "10",
    "f.price.facet.range.start" => "0",
    "facet" => "true",
    "facet.field" => ["cat", "author_str"],
    "facet.mincount" => "1",
    "facet.range" => ["price", "popularity"],
    "q" => "*",
    "rows" => "5"
  },
  "status" => 0,
  "zkConnected" => true
}

See Hui.Q, Hui.F, Hui.URL.encode_query/1 for more details on query structs.