[−][src]Crate stellr
Stellr
Stellr
is a solr client library.
It is still under active development, and definitely in an "alpha" state.
The crate is heavily dependent on the reqwest and serde crates. The dependence on reqwest means stellr does not support the async-std/smol async runtime, but tokio is supported.
The crate supports both non-Cloud and Cloud solr clients, and has non-Cloud and Cloud helper methods for both types of client. Output from requests can be structured with a user-defined type, or unstructured (using serde_json::Value instead).
Stellr makes use of extension traits, so you will need to use the prelude for it to work.
Examples
Here is an example of a structured cloud request on a direct client
use stellr::prelude::*; use stellr::DirectSolrClient; use stellr::response_types::SolrSelectType; use serde::Deserialize; #[allow(non_snake_case)] #[derive(Debug,Deserialize)] struct MatchingData { id: String, popularity: Option<u32>, inStock: bool, } let solr_client = DirectSolrClient::new("http://localhost:8983")?; let solr_request = solr_client .select("techproducts")? .rows(10) .q("id:SP251*") .fl("id,popularity,inStock"); let solr_response = solr_request .call::<SolrSelectType<MatchingData>>() .await ?; assert_eq!(solr_response.response.docs.len(), 1); assert_eq!(solr_response.response.docs[0].popularity, Some(6));
and here's an example of an unstructured request on a cloud client
use stellr::prelude::*; use stellr::ZkSolrClient; let solr_client = ZkSolrClient::new("localhost:9983", "/")?; let solr_request = solr_client .select("gettingstarted")? .rows(10) .q("*:*"); let result_struct = solr_request .unstructured_call() .await ; let docs_count = result_struct? .get("response").unwrap() .get("docs").unwrap() .as_array().unwrap() .len(); assert_eq!(10, docs_count);
Finally here is an example of data insertion
use stellr::prelude::*; use stellr::DirectSolrClient; use stellr::response_types::SolrUpdateType; use serde::Serialize; #[allow(non_snake_case)] #[derive(Serialize)] struct MyData { id: String, important_number: u32, } let solr_client = DirectSolrClient::new("http://localhost:8983")?; let my_data = vec!(MyData {id: String::from("random-extra-value"), important_number: 42},); let solr_request = solr_client .update("films")? .payload(&my_data)? .commit(); let result_struct = solr_request .call::<SolrUpdateType>() .await assert_eq!(result_struct?.responseHeader.status, 0);
Package Features
The crate only has one optional feature:
blocking
- use the blocking feature of the reqwest library, rather than the async version
Errors
Stellr defines a SolrError
struct, which wraps errors types from the serde, reqwest and
zookeeper crates.
Safety
This crate introduces no new unsafe code, beyond what already exists in it's dependencies.
Modules
prelude | |
response_types | Utility Structs for deserialising solr responses |
Structs
DirectSolrClient | Directly access a solr node via http. |
SolrClientConfig | Configuration object for SolrClients |
ZkSolrClient | Access a solr node using live_node information store in a Zookeeper ensemble. |
Enums
SolrError | SolrError wraps errors from the reqwest and serde crates. |
Traits
SolrClientBuilder | Adds methods to build an HTTP client configured according to a SolrClientConfig. |
SolrCloudMethods | Add Solr Cloud specific helper methods to any defined SolrClients. |
SolrCoreMethods | Add a set of helper methods for "classic Solr" (non-cloud) targets. |
SolrRequest | Common methods for solr requests |
SolrRequestBuilder | Helper methods to simplify request building |
Type Definitions
SolrResult |