DISCLAIMER: The GRPC API for Qdrant are under development and disabled by default in production builds. Limited functionality is exposed at the moment. This draft tutorial is for testing and internal use only.
This tutorial would use the grpcurl command line tool in order to perform grpc requests. Please follow the steps provided in the grpcurl repository in order to install it.
The GRPC feature is disabled by default in order not to impact the production binary until complete. In order to run qdrant with grpc feature enabled, executed the following command:
QDRANT__SERVICE__GRPC_PORT="6334" cargo run --bin qdrantIt will run qdrant exposing both json and grpc API. If you do not want to use JSON API, add --no-default-features
flag as well:
QDRANT__SERVICE__GRPC_PORT="6334" cargo run --no-default-features --bin qdrantNote that actix is not compiled in this case.
Execute the following command
grpcurl -plaintext -import-path ./lib/api/src/grpc/proto/ -proto qdrant.proto -d '{}' 0.0.0.0:6334 qdrant.Qdrant/HealthCheckHere and below the ./lib/api/src/grpc/proto/ should be a path to the folder with a probuf schemas.
Expected response:
{
"title": "qdrant - vector search engine",
"version": "<vesion>"
}First - let's create a collection with dot-production metric.
grpcurl -plaintext -import-path ./lib/api/src/grpc/proto/ -proto qdrant.proto -d '{
"collection_name": "test_collection",
"vectors_config": {
"params": {
"size": 4,
"distance": "Dot"
}
}
}' \
0.0.0.0:6334 qdrant.Collections/CreateExpected response:
{
"result": true,
"time": 0.482865481
}We can now view the list of collections to ensure that the collection was created:
grpcurl -plaintext -import-path ./lib/api/src/grpc/proto/ -proto qdrant.proto 0.0.0.0:6334 qdrant.Collections/ListExpected response:
{
"collections": [
{
"name": "test_collection"
}
],
"time": 9.4219e-05
}The collection could also be updated:
grpcurl -plaintext -import-path ./lib/api/src/grpc/proto/ -proto qdrant.proto -d '{
"collection_name": "test_collection",
"optimizers_config": {
"max_segment_size": 100
}
}' \
0.0.0.0:6334 qdrant.Collections/UpdateLet's now add vectors with some payload:
grpcurl -plaintext -import-path ./lib/api/src/grpc/proto/ -proto qdrant.proto -d '{
"collection_name": "test_collection",
"wait": true,
"points": [
{
"id": {
"num": 1
},
"vector": [0.05, 0.61, 0.76, 0.74],
"payload": {
"city": "Berlin",
"country": "Germany",
"population": 1000000,
"square": 12.5,
"coords": { "lat": 1.0, "lon": 2.0 }
}
},
{"id": {"num": 2}, "vector": [0.18, 0.01, 0.85, 0.80], "payload": {"square": [10, 11] }},
{"id": {"num": 3}, "vector": [0.24, 0.18, 0.22, 0.45], "payload": {"count": [0] }},
{"id": {"num": 4}, "vector": [0.24, 0.18, 0.22, 0.45], "payload": {"coords": [{ "lat": 1.0, "lon": 2.0}, { "lat": 3.0, "lon": 4.0}]}},
{"id": {"num": 5}, "vector": [0.35, 0.08, 0.11, 0.44]}
]
}' \
0.0.0.0:6334 qdrant.Points/UpsertExpected response:
{
"result": {
"status": "Completed"
},
"time": 0.004128988
}The qdrant.Collections/UpdateCollections rpc could also be used to delete a collection:
grpcurl -plaintext -import-path ./lib/api/src/grpc/proto/ -proto qdrant.proto -d '{
"collection_name": "test_collection"
}' \
0.0.0.0:6334 qdrant.Collections/Delete