Crate stellr

Crate stellr 

Source
Expand description

§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 Aliases§

SolrResult