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
Callback implementation for HTTPoison.Base.process_request_body/1
Callback implementation for HTTPoison.Base.process_request_headers/1
Callback implementation for HTTPoison.Base.process_request_options/1
Callback implementation for HTTPoison.Base.process_request_params/1
Callback implementation for HTTPoison.Base.process_request_url/1
Callback implementation for HTTPoison.Base.process_response/1
Callback implementation for HTTPoison.Base.process_response_body/1
Callback implementation for HTTPoison.Base.process_response_chunk/1
Callback implementation for HTTPoison.Base.process_response_headers/1
Callback implementation for HTTPoison.Base.process_response_status_code/1
Callback implementation for HTTPoison.Base.process_status_code/1
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
query_struct_list() :: [ Hui.Q.t() | Hui.D.t() | Hui.F.t() | highlighter_struct() | misc_struct() ]
Link to this section Functions
delete!(binary(), headers(), Keyword.t()) :: HTTPoison.Response.t() | HTTPoison.AsyncResponse.t()
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.
delete(binary(), headers(), Keyword.t()) :: {:ok, HTTPoison.Response.t() | HTTPoison.AsyncResponse.t()} | {:error, HTTPoison.Error.t()}
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.
get!(binary(), headers(), Keyword.t()) :: HTTPoison.Response.t() | HTTPoison.AsyncResponse.t()
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.
get(binary(), headers(), Keyword.t()) :: {:ok, HTTPoison.Response.t() | HTTPoison.AsyncResponse.t()} | {:error, HTTPoison.Error.t()}
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.
head!(binary(), headers(), Keyword.t()) :: HTTPoison.Response.t() | HTTPoison.AsyncResponse.t()
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.
head(binary(), headers(), Keyword.t()) :: {:ok, HTTPoison.Response.t() | HTTPoison.AsyncResponse.t()} | {:error, HTTPoison.Error.t()}
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.
options!(binary(), headers(), Keyword.t()) :: HTTPoison.Response.t() | HTTPoison.AsyncResponse.t()
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.
options(binary(), headers(), Keyword.t()) :: {:ok, HTTPoison.Response.t() | HTTPoison.AsyncResponse.t()} | {:error, HTTPoison.Error.t()}
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.
patch!(binary(), any(), headers(), Keyword.t()) :: HTTPoison.Response.t() | HTTPoison.AsyncResponse.t()
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.
patch(binary(), any(), headers(), Keyword.t()) :: {:ok, HTTPoison.Response.t() | HTTPoison.AsyncResponse.t()} | {:error, HTTPoison.Error.t()}
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.
post!(binary(), any(), headers(), Keyword.t()) :: HTTPoison.Response.t() | HTTPoison.AsyncResponse.t()
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.
post(binary(), any(), headers(), Keyword.t()) :: {:ok, HTTPoison.Response.t() | HTTPoison.AsyncResponse.t()} | {:error, HTTPoison.Error.t()}
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.
Callback implementation for HTTPoison.Base.process_headers/1.
Callback implementation for HTTPoison.Base.process_request_body/1.
Callback implementation for HTTPoison.Base.process_request_headers/1.
Callback implementation for HTTPoison.Base.process_request_options/1.
Callback implementation for HTTPoison.Base.process_request_params/1.
Callback implementation for HTTPoison.Base.process_request_url/1.
Callback implementation for HTTPoison.Base.process_response/1.
Callback implementation for HTTPoison.Base.process_response_body/1.
Callback implementation for HTTPoison.Base.process_response_chunk/1.
Callback implementation for HTTPoison.Base.process_response_headers/1.
Callback implementation for HTTPoison.Base.process_response_status_code/1.
Callback implementation for HTTPoison.Base.process_status_code/1.
Callback implementation for HTTPoison.Base.process_url/1.
put!(binary(), any(), headers(), Keyword.t()) :: HTTPoison.Response.t() | HTTPoison.AsyncResponse.t()
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.
put(binary(), any(), headers(), Keyword.t()) :: {:ok, HTTPoison.Response.t() | HTTPoison.AsyncResponse.t()} | {:error, HTTPoison.Error.t()}
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.
request!(atom(), binary(), any(), headers(), Keyword.t()) :: HTTPoison.Response.t() | HTTPoison.AsyncResponse.t()
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.
request(HTTPoison.Request.t()) :: {:ok, HTTPoison.Response.t() | HTTPoison.AsyncResponse.t()} | {:error, HTTPoison.Error.t()}
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)
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 listbody- request body. See more belowheaders- 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"}])
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.
stream_next(HTTPoison.AsyncResponse.t()) :: {:ok, HTTPoison.AsyncResponse.t()} | {:error, HTTPoison.Error.t()}
Requests the next message to be streamed for a given HTTPoison.AsyncResponse.
See request!/5 for more detailed information.
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.