42 个版本 (19 个稳定版)

1.11.1 2024年8月13日
1.10.3 2024年7月29日
1.8.0 2024年3月6日
1.7.0 2023年12月8日
0.8.6 2022年7月26日

#22 in 数据库接口

Download history 2600/week @ 2024-05-04 2010/week @ 2024-05-11 2109/week @ 2024-05-18 2224/week @ 2024-05-25 2664/week @ 2024-06-01 4461/week @ 2024-06-08 4494/week @ 2024-06-15 6572/week @ 2024-06-22 5516/week @ 2024-06-29 5904/week @ 2024-07-06 4196/week @ 2024-07-13 4278/week @ 2024-07-20 3093/week @ 2024-07-27 2876/week @ 2024-08-03 4094/week @ 2024-08-10 2724/week @ 2024-08-17

每月 13,400 次下载
22 个 Crates 中使用 (直接使用 20 个)

Apache-2.0

725KB
15K SLoC

Qdrant Rust 客户端

Qdrant - 高性能可扩展矢量搜索引擎的 Rust 客户端。

Crates.io docs.rs Apache 2.0 licensed

文档

安装

cargo add qdrant-client

软件包在 crates.io 上可用

示例

示例代码片段列表可在 此处 找到

更多示例可在 示例文件夹 中找到

依赖项

客户端通过 Tonic 库使用 gRPC。

要更改协议缓冲区定义中的任何内容,您需要 Protocol Buffers 编译器 protoc 以及 Protocol Buffers 资源文件。

有关更多详细信息,请参阅 Tonic 安装指南

使用

运行带有启用 gRPC 接口的 Qdrant

# With env variable
docker run -p 6333:6333 -p 6334:6334 \
    -e QDRANT__SERVICE__GRPC_PORT="6334" \
    qdrant/qdrant

或通过更新配置文件

service:
  grpc_port: 6334

有关 gRPC 的更多信息,请参阅 文档

发送请求

添加必要的依赖项

cargo add qdrant-client anyhow tonic tokio serde-json --features tokio/rt-multi-thread

将搜索示例 examples/search.rs 添加到您的 src/main.rs

use qdrant_client::qdrant::{
    Condition, CreateCollectionBuilder, Distance, Filter, PointStruct, ScalarQuantizationBuilder,
    SearchParamsBuilder, SearchPointsBuilder, UpsertPointsBuilder, VectorParamsBuilder,
};
use qdrant_client::{Payload, Qdrant, QdrantError};

#[tokio::main]
async fn main() -> Result<(), QdrantError> {
    // Example of top level client
    // You may also use tonic-generated client from `src/qdrant.rs`
    let client = Qdrant::from_url("https://127.0.0.1:6334").build()?;

    let collections_list = client.list_collections().await?;
    dbg!(collections_list);
    // collections_list = {
    //   "collections": [
    //     {
    //       "name": "test"
    //     }
    //   ]
    // }

    let collection_name = "test";
    client.delete_collection(collection_name).await?;

    client
        .create_collection(
            CreateCollectionBuilder::new(collection_name)
                .vectors_config(VectorParamsBuilder::new(10, Distance::Cosine))
                .quantization_config(ScalarQuantizationBuilder::default()),
        )
        .await?;

    let collection_info = client.collection_info(collection_name).await?;
    dbg!(collection_info);

    let payload: Payload = serde_json::json!(
        {
            "foo": "Bar",
            "bar": 12,
            "baz": {
                "qux": "quux"
            }
        }
    )
    .try_into()
    .unwrap();

    let points = vec![PointStruct::new(0, vec![12.; 10], payload)];
    client
        .upsert_points(UpsertPointsBuilder::new(collection_name, points))
        .await?;

    let search_result = client
        .search_points(
            SearchPointsBuilder::new(collection_name, [11.; 10], 10)
                .filter(Filter::all([Condition::matches("bar", 12)]))
                .with_payload(true)
                .params(SearchParamsBuilder::default().exact(true)),
        )
        .await?;
    dbg!(&search_result);
    // search_result = [
    //   {
    //     "id": 0,
    //     "version": 0,
    //     "score": 1.0000001,
    //     "payload": {
    //       "bar": 12,
    //       "baz": {
    //         "qux": "quux"
    //       },
    //       "foo": "Bar"
    //     }
    //   }
    // ]

    let found_point = search_result.result.into_iter().next().unwrap();
    let mut payload = found_point.payload;
    let baz_payload = payload.remove("baz").unwrap().into_json();
    println!("baz: {}", baz_payload);
    // baz: {"qux":"quux"}

    Ok(())
}

或直接运行此项目中的示例

cargo run --example search

Qdrant Cloud

Qdrant Cloud 是 Qdrant 的托管服务。

客户端需要正确配置才能访问该服务。

  • 请确保使用正确的端口号(6334)
  • 请确保传递您的 API 密钥
use qdrant_client::Qdrant;

let client = Qdrant::from_url("http://xxxxxxxxxx.eu-central.aws.cloud.qdrant.io:6334")
    // Use an environment variable for the API KEY for example
    .api_key(std::env::var("QDRANT_API_KEY"))
    .build()?;

依赖项

~13–25MB
~462K SLoC