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 数据库接口
每月 13,400 次下载
在 22 个 Crates 中使用 (直接使用 20 个)
725KB
15K SLoC
Qdrant Rust 客户端
Qdrant - 高性能可扩展矢量搜索引擎的 Rust 客户端。
文档
- Qdrant 文档: https://qdrant.tech/documentation/
- Crates 文档: https://docs.rs/qdrant-client
安装
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