================================================================================# qdrant_client - Rust
Source: https://docs.rsindex.html
Crate
qdrant_client
Copy item path
Source
Expand description
The
Qdrant
- High-Performance Vector Search at Scale - client for Rust.
This crate connects to your Qdrant server over gRPC and provides an easy to use API interface
for it.
§
Connect
First you’ll need to
set up
a
Qdrant
client, used to connect to a Qdrant
instance:
use
qdrant_client::Qdrant;
let
client = Qdrant::from_url(
"http://localhost:6334"
)
.api_key(std::env::var(
"QDRANT_API_KEY"
))
.build()
?
;
§
Create collection
Qdrant works with
Collections ⧉
of
Points ⧉
. To add vector data, you first
create a collection
:
use
qdrant_client::qdrant::{CreateCollectionBuilder, Distance, VectorParamsBuilder};
let
response = client
.create_collection(
CreateCollectionBuilder::new(
"my_collection"
)
.vectors_config(VectorParamsBuilder::new(
512
, Distance::Cosine)),
)
.
await
?
;
The most interesting parts are the two arguments of
VectorParamsBuilder::new
. The first one (
512
) is the
length of vectors to store and the second one (
Distance::Cosine
)
is the Distance, which is the
Distance
measure to gauge similarity for
the nearest neighbors search.
Documentation:
https://qdrant.tech/documentation/concepts/collections/#create-a-collection
§
Upsert points
Now we have a collection, we can insert (or rather upsert) points.
Points have an id, one or more vectors and a payload.
We can usually do that in bulk, but for this example, we’ll add a
single point:
use
qdrant_client::qdrant::{PointStruct, UpsertPointsBuilder};
let
points =
vec!
[
PointStruct::new(
42
,
// Unique point ID
vec!
[
0.0_f32
;
512
],
// Vector to upsert
// Attached payload
[
(
"great"
,
true
.into()),
(
"level"
,
9000
.into()),
(
"text"
,
"Hi Qdrant!"
.into()),
(
"list"
,
vec!
[
1.234f32
,
0.815
].into()),
],
),
];
let
response = client
.upsert_points(UpsertPointsBuilder::new(
"my_collection"
, points))
.
await
?
;
Documentation:
https://qdrant.tech/documentation/concepts/points/#upload-points
§
Search
Finally, we can retrieve points in various ways, the common one being a plain similarity
search:
use
qdrant_client::qdrant::SearchPointsBuilder;
let
search_request = SearchPointsBuilder::new(
"my_collection"
,
// Collection name
vec!
[
0.0_f32
;
512
],
// Search vector
4
,
// Search limit, number of results to return
).with_payload(
true
);
let
response = client.search_points(search_request).
await
?
;
The parameter for
SearchPointsBuilder::new()
constructor
are pretty straightforward: name of the collection, the vector and how many top-k results to
return. The
with_payload(true)
call tells qdrant
to also return the (full) payload data for each point. You can also add a
filter()
call to the
SearchPointsBuilder
to filter the result. See the
Filter
documentation for details.
Documentation:
https://qdrant.tech/documentation/concepts/search/
Modules
§
config
Client configuration
qdrant
API types
Structs
§
Payload
Point payload
Qdrant
API client to interact with a
Qdrant
server.
Enums
§
Qdrant
Error
Qdrant client error
Type Aliases
§
Qdrant
Builder
A builder for
Qdrant