Hui v0.8.3 Hui.Request View Source

Hui.Request module provides underpinning HTTP-based request functions for Solr, including:

Other low-level HTTP client features

Under the hood, Hui uses HTTPoison client to interact with Solr. The existing low-level functions of HTTPoison, e.g. get/1, get/3 remain available as part of this module.

Link to this section Summary

Functions

Issues a DELETE request to the given url, raising an exception in case of failure

Issues a DELETE request to the given url

Issues a GET request to the given url, raising an exception in case of failure

Issues a GET request to the given url

Issues a HEAD request to the given url, raising an exception in case of failure

Issues a HEAD request to the given url

Issues a OPTIONS request to the given url, raising an exception in case of failure

Issues an OPTIONS request to the given url

Issues a PATCH request to the given url, raising an exception in case of failure

Issues a PATCH request to the given url

Issues a POST request to the given url, raising an exception in case of failure

Issues a POST request to the given url

Callback implementation for HTTPoison.Base.process_headers/1

process_url(url) deprecated

Callback implementation for HTTPoison.Base.process_url/1

Issues a PUT request to the given url, raising an exception in case of failure

Issues a PUT request to the given url

Issues an HTTP request with the given method to the given url, raising an exception in case of failure

Issues an HTTP request using a Request struct

Issues an HTTP request with the given method to the given url

Issues a search query to a specific Solr endpoint

Starts HTTPoison and its dependencies

Requests the next message to be streamed for a given HTTPoison.AsyncResponse

Issues an update request to a specific Solr endpoint, for data uploading and deletion

Link to this section Types

Link to this section Functions

Link to this function delete!(url, headers \\ [], options \\ []) View Source

Issues a DELETE request to the given url, raising an exception in case of failure.

If the request does not fail, the response is returned.

See request!/5 for more detailed information.

Link to this function delete(url, headers \\ [], options \\ []) View Source

Issues a DELETE request to the given url.

Returns {:ok, response} if the request is successful, {:error, reason} otherwise.

See request/5 for more detailed information.

Issues a GET request to the given url, raising an exception in case of failure.

If the request does not fail, the response is returned.

See request!/5 for more detailed information.

Link to this function get(url, headers \\ [], options \\ []) View Source

Issues a GET request to the given url.

Returns {:ok, response} if the request is successful, {:error, reason} otherwise.

See request/5 for more detailed information.

Link to this function head!(url, headers \\ [], options \\ []) View Source

Issues a HEAD request to the given url, raising an exception in case of failure.

If the request does not fail, the response is returned.

See request!/5 for more detailed information.

Link to this function head(url, headers \\ [], options \\ []) View Source

Issues a HEAD request to the given url.

Returns {:ok, response} if the request is successful, {:error, reason} otherwise.

See request/5 for more detailed information.

Link to this function options!(url, headers \\ [], options \\ []) View Source

Issues a OPTIONS request to the given url, raising an exception in case of failure.

If the request does not fail, the response is returned.

See request!/5 for more detailed information.

Link to this function options(url, headers \\ [], options \\ []) View Source

Issues an OPTIONS request to the given url.

Returns {:ok, response} if the request is successful, {:error, reason} otherwise.

See request/5 for more detailed information.

Link to this function patch!(url, body, headers \\ [], options \\ []) View Source

Issues a PATCH request to the given url, raising an exception in case of failure.

If the request does not fail, the response is returned.

See request!/5 for more detailed information.

Link to this function patch(url, body, headers \\ [], options \\ []) View Source

Issues a PATCH request to the given url.

Returns {:ok, response} if the request is successful, {:error, reason} otherwise.

See request/5 for more detailed information.

Link to this function post!(url, body, headers \\ [], options \\ []) View Source

Issues a POST request to the given url, raising an exception in case of failure.

If the request does not fail, the response is returned.

See request!/5 for more detailed information.

Link to this function post(url, body, headers \\ [], options \\ []) View Source

Issues a POST request to the given url.

Returns {:ok, response} if the request is successful, {:error, reason} otherwise.

See request/5 for more detailed information.

Link to this function process_headers(headers) View Source
process_headers(list()) :: any()
This function is deprecated. Use process_response_headers/1 instead.

Callback implementation for HTTPoison.Base.process_headers/1.

Link to this function process_request_body(body) View Source
process_request_body(body()) :: body()

Callback implementation for HTTPoison.Base.process_request_body/1.

Link to this function process_request_headers(headers) View Source
process_request_headers(headers()) :: headers()

Callback implementation for HTTPoison.Base.process_request_headers/1.

Link to this function process_request_options(options) View Source
process_request_options(options()) :: options()

Callback implementation for HTTPoison.Base.process_request_options/1.

Link to this function process_request_params(params) View Source
process_request_params(params()) :: params()

Callback implementation for HTTPoison.Base.process_request_params/1.

Link to this function process_request_url(url) View Source
process_request_url(url()) :: url()

Callback implementation for HTTPoison.Base.process_request_url/1.

Link to this function process_response(response) View Source
process_response(response()) :: any()

Callback implementation for HTTPoison.Base.process_response/1.

Link to this function process_response_body(body) View Source
process_response_body(binary()) :: any()

Callback implementation for HTTPoison.Base.process_response_body/1.

Link to this function process_response_chunk(chunk) View Source
process_response_chunk(binary()) :: any()

Callback implementation for HTTPoison.Base.process_response_chunk/1.

Link to this function process_response_headers(headers) View Source
process_response_headers(list()) :: any()

Callback implementation for HTTPoison.Base.process_response_headers/1.

Link to this function process_response_status_code(status_code) View Source
process_response_status_code(integer()) :: any()

Callback implementation for HTTPoison.Base.process_response_status_code/1.

Link to this function process_status_code(status_code) View Source
process_status_code(integer()) :: any()
This function is deprecated. Use process_response_status_code/1 instead.

Callback implementation for HTTPoison.Base.process_status_code/1.

Link to this function process_url(url) View Source
process_url(url()) :: url()
This function is deprecated. Use process_request_url/1 instead.

Callback implementation for HTTPoison.Base.process_url/1.

Link to this function put!(url, body \\ "", headers \\ [], options \\ []) View Source

Issues a PUT request to the given url, raising an exception in case of failure.

If the request does not fail, the response is returned.

See request!/5 for more detailed information.

Link to this function put(url, body \\ "", headers \\ [], options \\ []) View Source

Issues a PUT request to the given url.

Returns {:ok, response} if the request is successful, {:error, reason} otherwise.

See request/5 for more detailed information.

Link to this function request!(method, url, body \\ "", headers \\ [], options \\ []) View Source

Issues an HTTP request with the given method to the given url, raising an exception in case of failure.

request!/5 works exactly like request/5 but it returns just the response in case of a successful request, raising an exception in case the request fails.

Issues an HTTP request using a Request struct.

This function returns {:ok, response} or {:ok, async_response} if the request is successful, {:error, reason} otherwise.

Examples

request = %HTTPoison.Request{
  method: :post,
  url: "https://my.website.com",
  body: "{\"foo\": 3}",
  headers: [{"Accept", "application/json"}]
}

request(request)
Link to this function request(method, url, body \\ "", headers \\ [], options \\ []) View Source
request(atom(), binary(), any(), headers(), Keyword.t()) ::
  {:ok, HTTPoison.Response.t() | HTTPoison.AsyncResponse.t()}
  | {:error, HTTPoison.Error.t()}

Issues an HTTP request with the given method to the given url.

This function is usually used indirectly by get/3, post/4, put/4, etc

Args:

  • method - HTTP method as an atom (:get, :head, :post, :put, :delete, etc.)
  • url - target url as a binary string or char list
  • body - request body. See more below
  • headers - HTTP headers as an orddict (e.g., [{"Accept", "application/json"}])
  • options - Keyword list of options

Body: see type HTTPoison.Request

Options: see type HTTPoison.Request

This function returns {:ok, response} or {:ok, async_response} if the request is successful, {:error, reason} otherwise.

Examples

request(:post, "https://my.website.com", "{\"foo\": 3}", [{"Accept", "application/json"}])
Link to this function search(url, bang \\ false, query) View Source
search(solr_url(), boolean(), solr_params()) ::
  {:ok, HTTPoison.Response.t()}
  | {:error, Hui.Error.t()}
  | HTTPoison.Response.t()

Issues a search query to a specific Solr endpoint.

The query parameters can be a keyword list or a list of Hui query structs (query_struct_list/0).

Example - parameters

  url = "http://..."

  # Parameters can be supplied as a list of keywords, which are unbound and sent to Solr directly
  Hui.Request.search(url, q: "glen cova", facet: "true", "facet.field": ["type", "year"])

  # Parameters can be a list of query structs
  Hui.Request.search(url, [%Hui.Q{q: "glen cova"}, %Hui.F{field: ["type", "year"]}])

  # DisMax query, multiple structs usage
  x = %Hui.D{q: "edinburgh", qf: "description^2.3 title", mm: "2<-25% 9<-3"}
  y = %Hui.Q{rows: 10, fq: ["cat:electronics"]}
  z = %Hui.F{field: ["popularity"]} # faceting
  Hui.Request.search(url, [x, y, z])

The use of structs is more idiomatic and succinct. It is bound to qualified Solr fields.

The function returns a tuple or a HTTPoison.Response directly when bang = true. This could be used to implement “bangified” functions such as search! as per Elixir convention.

  Hui.Request.search(url, [x, y, z]) 
  # => {:ok, %HTTPoison.Response{..}}

  bang = true
  Hui.Request.search(url, bang, [x, y, z]) 
  # => %HTTPoison.Response{..} or raise Hui.Error

Example - URL endpoints

The URL can be specified as Hui.URL.t/0.

  url = %Hul.URL{url: "http://..."}
  Hui.Request.search(url, q: "loch", rows: 5)
  # -> http://.../select?q=loch&rows=5

A key for application-configured endpoint may also be used.

  url = :suggester
  Hui.Request.search(url, suggest: true, "suggest.dictionary": "mySuggester", "suggest.q": "el")
  # the above sends http://..configured_url../suggest?suggest=true&suggest.dictionary=mySuggester&suggest.q=el

See Hui.URL.configured_url/1 for more details.

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.Request.search(url, q: "solr rocks")

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

Starts HTTPoison and its dependencies.

Requests the next message to be streamed for a given HTTPoison.AsyncResponse.

See request!/5 for more detailed information.

Link to this function update(url, bang \\ false, data) View Source
update(solr_url(), boolean(), binary() | Hui.U.t()) ::
  {:ok, HTTPoison.Response.t()}
  | {:error, Hui.Error.t()}
  | HTTPoison.Response.t()

Issues an update request to a specific Solr endpoint, for data uploading and deletion.

The request sends update data in Hui.U struct or binary format to an endpoint specified in a Hui.URL.t/0 struct or a URL config key. A content type header is required so that Solr knows the incoming data format (JSON, XML etc.) and can process data accordingly.

Example

  # Specify an endpoint for JSON-formatted update
  headers = [{"Content-type", "application/json"}]
  url = %Hui.URL{url: "http://localhost:8983/solr/collection", handler: "update", headers: headers}

  # Solr data / docs - field mapping
  doc1 = %{
    "actor_ss" => ["Ingrid Bergman", "Liv Ullmann", "Lena Nyman", "Halvar Björk"],
    "desc" => "A married daughter who longs for her mother's love is visited by the latter, a successful concert pianist.",
    "directed_by" => ["Ingmar Bergman"],
    "genre" => ["Drama", "Music"],
    "id" => "tt0077711",
    "initial_release_date" => "1978-10-08",
    "name" => "Autumn Sonata"
  }
  doc2 = %{
    "actor_ss" => ["Bibi Andersson", "Liv Ullmann", "Margaretha Krook"],
    "desc" => "A nurse is put in charge of a mute actress and finds that their personas are melding together.",
    "directed_by" => ["Ingmar Bergman"],
    "genre" => ["Drama", "Thriller"],
    "id" => "tt0060827",
    "initial_release_date" => "1967-09-21",
    "name" => "Persona"
  }

  # Hui.U struct command for updating and committing the docs to Solr within 5 seconds
  x = %Hui.U{doc: [doc1, doc2], commitWithin: 5000, overwrite: true}
  {status, resp} = Hui.Request.update(url, x)

  # Delete the docs by IDs, with a URL key from configuration
  {status, resp} = Hui.Request.update(:library_update, %Hui.U{delete_id: ["tt1316540", "tt1650453"]})

  # Commit and optimise index, keep max index segments at 10
  {status, resp} = Hui.Request.update(url, %Hui.U{commit: true, waitSearcher: true, optimize: true, maxSegments: 10})

  # Commit index, expunge deleted docs
  {status, resp} = Hui.Request.update(url, %Hui.U{commit: true, expungeDeletes: true})

  # Direct response or exception in case of failture
  # for implementing bang! style function
  bang = true
  resp = Hui.Request.update(url, bang, json_doc)

  # Binary mode,
  json_binary = # any encoded binary data, e.g. raw JSON from a file
  {status, resp} = Hui.Request.update(url, json_binary)

  # Binary mode, e.g. delete a document via XML binary
  headers = [{"Content-type", "application/xml"}]
  url = %Hui.URL{url: "http://localhost:8983/solr/collection", handler: "update", headers: headers}
  {status, resp} = Hui.Request.update(url, "<delete><id>9780141981727</id></delete>")

See Solr reference for more details on various data commands, types and formats.