11 个版本

0.5.0 2024 年 7 月 26 日
0.4.3 2024 年 1 月 20 日
0.4.2 2023 年 12 月 15 日
0.4.0 2023 年 9 月 1 日
0.1.1 2023 年 8 月 9 日

#591 in 网页编程

Download history 90/week @ 2024-07-21 37/week @ 2024-07-28

每月下载量 127

MIT/Apache

195KB
3K SLoC

Solrstice: Rust 和 Python 的 Solr 8+ 客户端

Lines of code

Solrstice 是一个用 Rust 编写的 SolrCloud 意识客户端库。它还提供了一个用于 Python 的包装器。

功能

  • 配置 API
  • 集合 API
  • 别名 API
  • 选择文档
    • 分组组件查询
    • DefTypes (lucene, dismax, edismax)
    • 分面计数(查询、字段、旋转)
    • Json 分面(查询、统计、术语、嵌套)
  • 索引文档
  • 删除文档

示例

上传配置,创建集合,索引文档,选择并删除。

use serde::{Deserialize, Serialize};
use solrstice::AsyncSolrCloudClient;
use solrstice::SolrSingleServerHost;
use solrstice::SolrBasicAuth;
use solrstice::SolrServerContextBuilder;
use solrstice::models::error::SolrError;
use solrstice::{DeleteQuery, UpdateQuery};
use solrstice::SelectQuery;
use std::path::Path;

#[derive(Serialize, Deserialize, Debug)]
struct TestData {
    id: String,
}

#[tokio::test]
pub async fn example() -> Result<(), SolrError> {

    //Create a solr client. You can also use a list of zookeeper hosts instead of a single server.
    let context = SolrServerContextBuilder::new(SolrSingleServerHost::new("http://localhost:8983"))
        .with_auth(SolrBasicAuth::new("solr", Some("SolrRocks"))).build();
    let client = AsyncSolrCloudClient::new(context);

    // Upload config
    client
        .upload_config("example_config", Path::new("/path/to/config"))
        .await?;

    // Create collection
    client
        .create_collection("example_collection", "example_config", 1, 1)
        .await?;

    // Index document
    let docs = vec![TestData {
        id: "example_document".to_string(),
    }];
    client
        .index(
            &UpdateQuery::new(),
            "example_collection",
            docs.as_slice(),
        )
        .await?;

    // Search and retrieve the document
    let docs = client
        .select(
            &SelectQuery::new().fq(["id:example_document"]),
            "example_collection",
        )
        .await?
        .get_docs_response()
        .ok_or("No response provided")?
        .get_docs::<TestData>()?;

    // Delete the document
    client
        .delete(
            &DeleteQuery::new().ids(["example_document"]),
            "example_collection",
        )
        .await?;
    Ok(())
}

依赖项

~12–26MB
~419K SLoC