1个不稳定版本

0.1.0 2021年1月4日

#2883 in 数据库接口

MIT/Apache

43KB
617

Stellr

一个基于reqwest和serde crate的Rust Solr客户端。

这个crate仍然是一个非常在进展中的项目。

安装

一旦这个crate在crates.io上可用,您可以使用以下命令安装它

     [dependencies]
     stellr = "0.1.0"

该crate使用了扩展特性,所以您应该包含stellr::prelude以避免关于缺失方法的错误

     use stellr::prelude::*

使用

这个客户端有两种模式,一种是无结构输出模式(使用serde_json::Value),另一种是输出结构定义的模式。

下面是一个无结构请求的示例(可能返回一个SolrError,封装在SolrResult中)

    use stellr::prelude::*;
    use stellr::clients::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?;
    println!("{:?}", result_struct);

    let docs_count = result_struct.get("response")?.get("docs")?.as_array()?.len();
    assert_eq!(10, docs_count);

下面是一个结构化请求的示例

    use stellr::prelude::*;
    use stellr::clients::DirectSolrClient;
    use stellr::types::SolrSelectType;

    let solr_client = DirectSolrClient::new("localhost", 8983)?;
    let solr_request = solr_client
        .select(collection)?
        .rows(10)
        .q("*:*");

    let solr_response = solr_request.call::<SolrSelectType<String>>().await?;
    if let Ok(result_struct) = response {
        println!("{} results found", result_struct.response.numFound);
    }

如果这些示例有问题,请参阅cargo doc中的示例。

客户端大量依赖于reqwest和serde crate,特别是使用reqwest::RequestBuilder来构造查询,以及使用serde_json来反序列化输出。

SolrError枚举封装了由这两个crate(reqwest::Error和serde_json::error::Error)生成的错误,以及一个用于stellar自身可能出现的任何问题的通配错误类型。

默认行为是提供异步版本的方法调用。如果您想使用阻塞调用,请指定"blocking"特性(上面的示例在没有移除"await"的情况下可以工作)。

待办事项

这里还有很多事情要做

  • 更多测试,并观察实际中的易用性
  • 向crate中添加更多跟踪输出
  • 支持更多请求类型(例如分面查询和流式表达式)
  • 使ZkSolrClient监视/live_nodes,并在后台更新
  • 将此通用化,使其不依赖于Reqwest,以便我们可以支持其他异步运行时

依赖项

~3.5–8.5MB
~189K SLoC