Qdrant API
vmasterContact: andrey@vasnetsov.com
{protocol}://{hostname}:{port}API description for Qdrant vector search engine.
This document describes CRUD and search operations on collections of points (vectors with payload).
Qdrant supports any combinations of should, min_should, must and must_not conditions, which makes it possible to use in applications when object could not be described solely by vector. It could be location features, availability flags, and other custom properties businesses should take into account.
Examples
This examples cover the most basic use-cases - collection creation and basic vector search.
Create collection
First - let's create a collection with dot-production metric.
curl -X PUT 'http://localhost:6333/collections/test_collection' \
-H 'Content-Type: application/json' \
--data-raw '{
"vectors": {
"size": 4,
"distance": "Dot"
}
}'
Expected response:
{
"result": true,
"status": "ok",
"time": 0.031095451
}We can ensure that collection was created:
curl 'http://localhost:6333/collections/test_collection'Expected response:
{
"result": {
"status": "green",
"segments_count": 5,
"disk_data_size": 0,
"ram_data_size": 0,
"config": {
"params": {
"vectors": {
"size": 4,
"distance": "Dot"
}
},
"hnsw_config": {
"m": 16,
"ef_construct": 100,
"full_scan_threshold": 10000
},
"optimizer_config": {
"deleted_threshold": 0.2,
"vacuum_min_vector_number": 1000,
"default_segment_number": 2,
"max_segment_size": null,
"memmap_threshold": null,
"indexing_threshold": 20000,
"flush_interval_sec": 5,
"max_optimization_threads": null
},
"wal_config": {
"wal_capacity_mb": 32,
"wal_segments_ahead": 0
}
}
},
"status": "ok",
"time": 2.1199e-05
}Add points
Let's now add vectors with some payload:
curl -L -X PUT 'http://localhost:6333/collections/test_collection/points?wait=true' \ -H 'Content-Type: application/json' \ --data-raw '{
"points": [
{"id": 1, "vector": [0.05, 0.61, 0.76, 0.74], "payload": {"city": "Berlin"}},
{"id": 2, "vector": [0.19, 0.81, 0.75, 0.11], "payload": {"city": ["Berlin", "London"] }},
{"id": 3, "vector": [0.36, 0.55, 0.47, 0.94], "payload": {"city": ["Berlin", "Moscow"] }},
{"id": 4, "vector": [0.18, 0.01, 0.85, 0.80], "payload": {"city": ["London", "Moscow"] }},
{"id": 5, "vector": [0.24, 0.18, 0.22, 0.44], "payload": {"count": [0]}},
{"id": 6, "vector": [0.35, 0.08, 0.11, 0.44]}
]
}'Expected response:
{
"result": {
"operation_id": 0,
"status": "completed"
},
"status": "ok",
"time": 0.000206061
}Search with filtering
Let's start with a basic request:
curl -L -X POST 'http://localhost:6333/collections/test_collection/points/search' \ -H 'Content-Type: application/json' \ --data-raw '{
"vector": [0.2,0.1,0.9,0.7],
"top": 3
}'Expected response:
{
"result": [
{ "id": 4, "score": 1.362, "payload": null, "version": 0 },
{ "id": 1, "score": 1.273, "payload": null, "version": 0 },
{ "id": 3, "score": 1.208, "payload": null, "version": 0 }
],
"status": "ok",
"time": 0.000055785
}But result is different if we add a filter:
curl -L -X POST 'http://localhost:6333/collections/test_collection/points/search' \ -H 'Content-Type: application/json' \ --data-raw '{
"filter": {
"should": [
{
"key": "city",
"match": {
"value": "London"
}
}
]
},
"vector": [0.2, 0.1, 0.9, 0.7],
"top": 3
}'Expected response:
{
"result": [
{ "id": 4, "score": 1.362, "payload": null, "version": 0 },
{ "id": 2, "score": 0.871, "payload": null, "version": 0 }
],
"status": "ok",
"time": 0.000093972
}Authentication
api-keyapiKeyAuthorization key, either read-write or read-only
API Key: api-key in header
bearerAuthhttpScheme: bearer
Collections
Searchable collections of points.
List collections
Get list name of all existing collections
Response
successful operation
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X GET '{protocol}://{hostname}:{port}/collections'const response = await fetch('{protocol}://{hostname}:{port}/collections', {
method: 'GET',
});
const data = await response.json();import requests
response = requests.get('{protocol}://{hostname}:{port}/collections')
data = response.json(){
"usage": null,
"time": 0.002,
"status": "ok",
"result": {
"collections": [
{
"name": "arxiv-title"
},
{
"name": "arxiv-abstract"
},
{
"name": "medium-title"
},
{
"name": "medium-text"
}
]
}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Collection info
Get detailed information about specified existing collection
Parameters
collection_namestringrequiredpathName of the collection to retrieve
Response
successful operation
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X GET '{protocol}://{hostname}:{port}/collections/{collection_name}'const response = await fetch('{protocol}://{hostname}:{port}/collections/{collection_name}', {
method: 'GET',
});
const data = await response.json();import requests
response = requests.get('{protocol}://{hostname}:{port}/collections/{collection_name}')
data = response.json(){
"usage": null,
"time": 0.002,
"status": "ok",
"result": {
"status": "green",
"optimizer_status": "ok",
"warnings": [
{
"message": "string"
}
],
"indexed_vectors_count": 0,
"points_count": 0,
"segments_count": 0,
"config": {
"params": {
"vectors": {
"size": 1,
"distance": "Cosine",
"hnsw_config": {
"m": 0,
"ef_construct": 4,
"full_scan_threshold": 10,
"max_indexing_threads": 0,
"on_disk": true,
"memory": "cold",
"payload_m": 0,
"inline_storage": true
},
"quantization_config": {
"scalar": {
"type": "int8",
"quantile": 0.5,
"always_ram": true,
"memory": "cold"
}
},
"on_disk": true,
"memory": "cold",
"datatype": "float32",
"multivector_config": {
"comparator": "max_sim"
}
},
"shard_number": 1,
"sharding_method": "auto",
"replication_factor": 1,
"write_consistency_factor": 1,
"read_fan_out_factor": 0,
"read_fan_out_delay_ms": 0,
"on_disk_payload": true,
"payload": {
"memory": "cold"
},
"id_tracker": {
"memory": "cold"
},
"sparse_vectors": {}
},
"hnsw_config": {
"m": 0,
"ef_construct": 4,
"full_scan_threshold": 0,
"max_indexing_threads": 0,
"on_disk": true,
"memory": "cold",
"payload_m": 0,
"inline_storage": true
},
"optimizer_config": {
"deleted_threshold": 0.2,
"vacuum_min_vector_number": 1000,
"default_segment_number": 0,
"max_segment_size": null,
"memmap_threshold": null,
"indexing_threshold": null,
"flush_interval_sec": 0,
"max_optimization_threads": null,
"prevent_unoptimized": null
},
"wal_config": {
"wal_capacity_mb": 1,
"wal_segments_ahead": 0,
"wal_retain_closed": 1
},
"quantization_config": null,
"strict_mode_config": {
"enabled": true,
"max_query_limit": 0,
"max_timeout": 0,
"unindexed_filtering_retrieve": true,
"unindexed_filtering_update": true,
"search_max_hnsw_ef": 0,
"search_allow_exact": true,
"search_max_oversampling": 0,
"upsert_max_batchsize": 0,
"search_max_batchsize": 0,
"max_collection_vector_size_bytes": 0,
"read_rate_limit": 0,
"write_rate_limit": 0,
"max_collection_payload_size_bytes": 0,
"max_points_count": 0,
"filter_max_conditions": 0,
"condition_max_size": 0,
"multivector_config": {},
"sparse_config": {},
"max_payload_index_count": 0,
"max_resident_memory_percent": 0
},
"metadata": {
"city": "London",
"color": "green"
}
},
"payload_schema": {},
"update_queue": {
"length": 0,
"deferred_points": 0
}
}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Create collection
Create new collection with given parameters
Body
Parameters of a new collection
Operation for creating new collection and (optionally) specify index params
vectorsVectorParams | objectVector params separator for single and multiple vector modes Single mode:
{ "size": 128, "distance": "Cosine" }
or multiple mode:
{ "default": { "size": 128, "distance": "Cosine" } }
shard_numberinteger<uint32> | null>= 1nullFor auto sharding: Number of shards in collection. - Default is 1 for standalone, otherwise equal to the number of nodes - Minimum is 1
For custom sharding: Number of shards in collection per shard group. - Default is 1, meaning that each shard key will be mapped to a single shard - Minimum is 1
sharding_methodShardingMethod | anynullSharding method Default is Auto - points are distributed across all available shards Custom - points are distributed across shards according to shard key
replication_factorinteger<uint32> | null>= 1nullNumber of shards replicas. Default is 1 Minimum is 1
write_consistency_factorinteger<uint32> | null>= 1nullDefines how many replicas should apply the operation for us to consider it successful. Increasing this number will make the collection more resilient to inconsistencies, but will also make it fail if not enough replicas are available. Does not have any performance impact.
on_disk_payloadboolean | nullnulldeprecatedDeprecated: use payload.memory instead. If true - point's payload will not be stored in memory. It will be read from the disk every time it is requested. This setting saves RAM by (slightly) increasing the response time. Note: those payload values that are involved in filtering and are indexed - remain in RAM.
Default: true
payloadPayloadStorageParams | anynullConfiguration of the payload storage
id_trackerIdTrackerParams | anynullConfiguration of the point id tracker
hnsw_configHnswConfigDiff | anyCustom params for HNSW index. If none - values from service configuration file are used.
wal_configWalConfigDiff | anyCustom params for WAL. If none - values from service configuration file are used.
optimizers_configOptimizersConfigDiff | anyCustom params for Optimizers. If none - values from service configuration file are used.
quantization_configScalarQuantization | ProductQuantization | BinaryQuantization | TurboQuantization | anynullQuantization parameters. If none - quantization is disabled.
sparse_vectorsobject | nullSparse vector data config.
strict_mode_configStrictModeConfig | anyStrict-mode config.
metadataPayload | anyArbitrary JSON metadata for the collection This can be used to store application-specific information such as creation time, migration data, inference model info, etc.
Parameters
collection_namestringrequiredpathName of the new collection
timeoutinteger>= 1queryWait for operation commit timeout in seconds. If timeout is reached - request will return with service error.
Response
successful operation
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X PUT '{protocol}://{hostname}:{port}/collections/{collection_name}' \
-H 'Content-Type: application/json' \
-d '{
"vectors": {
"size": 1,
"distance": "Cosine",
"hnsw_config": {
"m": 0,
"ef_construct": 4,
"full_scan_threshold": 10,
"max_indexing_threads": 0,
"on_disk": true,
"memory": "cold",
"payload_m": 0,
"inline_storage": true
},
"quantization_config": {
"scalar": {
"type": "int8",
"quantile": 0.5,
"always_ram": true,
"memory": "cold"
}
},
"on_disk": true,
"memory": "cold",
"datatype": "float32",
"multivector_config": {
"comparator": "max_sim"
}
},
"shard_number": null,
"sharding_method": null,
"replication_factor": null,
"write_consistency_factor": null,
"on_disk_payload": null,
"payload": null,
"id_tracker": null,
"hnsw_config": {
"m": 0,
"ef_construct": 4,
"full_scan_threshold": 10,
"max_indexing_threads": 0,
"on_disk": true,
"memory": "cold",
"payload_m": 0,
"inline_storage": true
},
"wal_config": {
"wal_capacity_mb": 1,
"wal_segments_ahead": 0,
"wal_retain_closed": 0
},
"optimizers_config": {
"deleted_threshold": 0,
"vacuum_min_vector_number": 100,
"default_segment_number": 0,
"max_segment_size": 1,
"memmap_threshold": 0,
"indexing_threshold": 0,
"flush_interval_sec": 0,
"max_optimization_threads": "auto",
"prevent_unoptimized": null
},
"quantization_config": null,
"sparse_vectors": {},
"strict_mode_config": {
"enabled": true,
"max_query_limit": 1,
"max_timeout": 1,
"unindexed_filtering_retrieve": true,
"unindexed_filtering_update": true,
"search_max_hnsw_ef": 0,
"search_allow_exact": true,
"search_max_oversampling": 0,
"upsert_max_batchsize": 0,
"search_max_batchsize": 0,
"max_collection_vector_size_bytes": 0,
"read_rate_limit": 1,
"write_rate_limit": 1,
"max_collection_payload_size_bytes": 0,
"max_points_count": 1,
"filter_max_conditions": 0,
"condition_max_size": 0,
"multivector_config": {},
"sparse_config": {},
"max_payload_index_count": 0,
"max_resident_memory_percent": 1
},
"metadata": {
"city": "London",
"color": "green"
}
}'const response = await fetch('{protocol}://{hostname}:{port}/collections/{collection_name}', {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
"vectors": {
"size": 1,
"distance": "Cosine",
"hnsw_config": {
"m": 0,
"ef_construct": 4,
"full_scan_threshold": 10,
"max_indexing_threads": 0,
"on_disk": true,
"memory": "cold",
"payload_m": 0,
"inline_storage": true
},
"quantization_config": {
"scalar": {
"type": "int8",
"quantile": 0.5,
"always_ram": true,
"memory": "cold"
}
},
"on_disk": true,
"memory": "cold",
"datatype": "float32",
"multivector_config": {
"comparator": "max_sim"
}
},
"shard_number": null,
"sharding_method": null,
"replication_factor": null,
"write_consistency_factor": null,
"on_disk_payload": null,
"payload": null,
"id_tracker": null,
"hnsw_config": {
"m": 0,
"ef_construct": 4,
"full_scan_threshold": 10,
"max_indexing_threads": 0,
"on_disk": true,
"memory": "cold",
"payload_m": 0,
"inline_storage": true
},
"wal_config": {
"wal_capacity_mb": 1,
"wal_segments_ahead": 0,
"wal_retain_closed": 0
},
"optimizers_config": {
"deleted_threshold": 0,
"vacuum_min_vector_number": 100,
"default_segment_number": 0,
"max_segment_size": 1,
"memmap_threshold": 0,
"indexing_threshold": 0,
"flush_interval_sec": 0,
"max_optimization_threads": "auto",
"prevent_unoptimized": null
},
"quantization_config": null,
"sparse_vectors": {},
"strict_mode_config": {
"enabled": true,
"max_query_limit": 1,
"max_timeout": 1,
"unindexed_filtering_retrieve": true,
"unindexed_filtering_update": true,
"search_max_hnsw_ef": 0,
"search_allow_exact": true,
"search_max_oversampling": 0,
"upsert_max_batchsize": 0,
"search_max_batchsize": 0,
"max_collection_vector_size_bytes": 0,
"read_rate_limit": 1,
"write_rate_limit": 1,
"max_collection_payload_size_bytes": 0,
"max_points_count": 1,
"filter_max_conditions": 0,
"condition_max_size": 0,
"multivector_config": {},
"sparse_config": {},
"max_payload_index_count": 0,
"max_resident_memory_percent": 1
},
"metadata": {
"city": "London",
"color": "green"
}
}),
});
const data = await response.json();import requests
payload = {
"vectors": {
"size": 1,
"distance": "Cosine",
"hnsw_config": {
"m": 0,
"ef_construct": 4,
"full_scan_threshold": 10,
"max_indexing_threads": 0,
"on_disk": True,
"memory": "cold",
"payload_m": 0,
"inline_storage": True
},
"quantization_config": {
"scalar": {
"type": "int8",
"quantile": 0.5,
"always_ram": True,
"memory": "cold"
}
},
"on_disk": True,
"memory": "cold",
"datatype": "float32",
"multivector_config": {
"comparator": "max_sim"
}
},
"shard_number": None,
"sharding_method": None,
"replication_factor": None,
"write_consistency_factor": None,
"on_disk_payload": None,
"payload": None,
"id_tracker": None,
"hnsw_config": {
"m": 0,
"ef_construct": 4,
"full_scan_threshold": 10,
"max_indexing_threads": 0,
"on_disk": True,
"memory": "cold",
"payload_m": 0,
"inline_storage": True
},
"wal_config": {
"wal_capacity_mb": 1,
"wal_segments_ahead": 0,
"wal_retain_closed": 0
},
"optimizers_config": {
"deleted_threshold": 0,
"vacuum_min_vector_number": 100,
"default_segment_number": 0,
"max_segment_size": 1,
"memmap_threshold": 0,
"indexing_threshold": 0,
"flush_interval_sec": 0,
"max_optimization_threads": "auto",
"prevent_unoptimized": None
},
"quantization_config": None,
"sparse_vectors": {},
"strict_mode_config": {
"enabled": True,
"max_query_limit": 1,
"max_timeout": 1,
"unindexed_filtering_retrieve": True,
"unindexed_filtering_update": True,
"search_max_hnsw_ef": 0,
"search_allow_exact": True,
"search_max_oversampling": 0,
"upsert_max_batchsize": 0,
"search_max_batchsize": 0,
"max_collection_vector_size_bytes": 0,
"read_rate_limit": 1,
"write_rate_limit": 1,
"max_collection_payload_size_bytes": 0,
"max_points_count": 1,
"filter_max_conditions": 0,
"condition_max_size": 0,
"multivector_config": {},
"sparse_config": {},
"max_payload_index_count": 0,
"max_resident_memory_percent": 1
},
"metadata": {
"city": "London",
"color": "green"
}
}
response = requests.put('{protocol}://{hostname}:{port}/collections/{collection_name}', json=payload)
data = response.json(){
"vectors": {
"size": 1,
"distance": "Cosine",
"hnsw_config": {
"m": 0,
"ef_construct": 4,
"full_scan_threshold": 10,
"max_indexing_threads": 0,
"on_disk": true,
"memory": "cold",
"payload_m": 0,
"inline_storage": true
},
"quantization_config": {
"scalar": {
"type": "int8",
"quantile": 0.5,
"always_ram": true,
"memory": "cold"
}
},
"on_disk": true,
"memory": "cold",
"datatype": "float32",
"multivector_config": {
"comparator": "max_sim"
}
},
"shard_number": null,
"sharding_method": null,
"replication_factor": null,
"write_consistency_factor": null,
"on_disk_payload": null,
"payload": null,
"id_tracker": null,
"hnsw_config": {
"m": 0,
"ef_construct": 4,
"full_scan_threshold": 10,
"max_indexing_threads": 0,
"on_disk": true,
"memory": "cold",
"payload_m": 0,
"inline_storage": true
},
"wal_config": {
"wal_capacity_mb": 1,
"wal_segments_ahead": 0,
"wal_retain_closed": 0
},
"optimizers_config": {
"deleted_threshold": 0,
"vacuum_min_vector_number": 100,
"default_segment_number": 0,
"max_segment_size": 1,
"memmap_threshold": 0,
"indexing_threshold": 0,
"flush_interval_sec": 0,
"max_optimization_threads": "auto",
"prevent_unoptimized": null
},
"quantization_config": null,
"sparse_vectors": {},
"strict_mode_config": {
"enabled": true,
"max_query_limit": 1,
"max_timeout": 1,
"unindexed_filtering_retrieve": true,
"unindexed_filtering_update": true,
"search_max_hnsw_ef": 0,
"search_allow_exact": true,
"search_max_oversampling": 0,
"upsert_max_batchsize": 0,
"search_max_batchsize": 0,
"max_collection_vector_size_bytes": 0,
"read_rate_limit": 1,
"write_rate_limit": 1,
"max_collection_payload_size_bytes": 0,
"max_points_count": 1,
"filter_max_conditions": 0,
"condition_max_size": 0,
"multivector_config": {},
"sparse_config": {},
"max_payload_index_count": 0,
"max_resident_memory_percent": 1
},
"metadata": {
"city": "London",
"color": "green"
}
}{
"usage": null,
"time": 0.002,
"status": "ok",
"result": true
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Delete collection
Drop collection and all associated data
Parameters
collection_namestringrequiredpathName of the collection to delete
timeoutinteger>= 1queryWait for operation commit timeout in seconds. If timeout is reached - request will return with service error.
Response
successful operation
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X DELETE '{protocol}://{hostname}:{port}/collections/{collection_name}'const response = await fetch('{protocol}://{hostname}:{port}/collections/{collection_name}', {
method: 'DELETE',
});
const data = await response.json();import requests
response = requests.delete('{protocol}://{hostname}:{port}/collections/{collection_name}')
data = response.json(){
"usage": null,
"time": 0.002,
"status": "ok",
"result": true
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Update collection parameters
Update parameters of the existing collection
Body
New parameters
Operation for updating parameters of the existing collection
vectorsVectorsConfigDiff | anyMap of vector data parameters to update for each named vector. To update parameters in a collection having a single unnamed vector, use an empty string as name.
optimizers_configOptimizersConfigDiff | anyCustom params for Optimizers. If none - it is left unchanged. This operation is blocking, it will only proceed once all current optimizations are complete
paramsCollectionParamsDiff | anyCollection base params. If none - it is left unchanged.
hnsw_configHnswConfigDiff | anyHNSW parameters to update for the collection index. If none - it is left unchanged.
quantization_configScalarQuantization | ProductQuantization | BinaryQuantization | TurboQuantization | Disabled | anynullQuantization parameters to update. If none - it is left unchanged.
sparse_vectorsSparseVectorsConfig | anyMap of sparse vector data parameters to update for each sparse vector.
strict_mode_configStrictModeConfig | anymetadataPayload | anyMetadata to update for the collection. If provided, this will merge with existing metadata. Individual keys can be removed by setting their value to null.
Parameters
collection_namestringrequiredpathName of the collection to update
timeoutinteger>= 1queryWait for operation commit timeout in seconds. If timeout is reached - request will return with service error.
Response
successful operation
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X PATCH '{protocol}://{hostname}:{port}/collections/{collection_name}' \
-H 'Content-Type: application/json' \
-d '{
"vectors": {},
"optimizers_config": {
"deleted_threshold": 0,
"vacuum_min_vector_number": 100,
"default_segment_number": 0,
"max_segment_size": 1,
"memmap_threshold": 0,
"indexing_threshold": 0,
"flush_interval_sec": 0,
"max_optimization_threads": "auto",
"prevent_unoptimized": null
},
"params": {
"replication_factor": 1,
"write_consistency_factor": 1,
"read_fan_out_factor": 0,
"read_fan_out_delay_ms": 0,
"on_disk_payload": null,
"payload": {
"memory": "cold"
},
"id_tracker": {
"memory": "cold"
}
},
"hnsw_config": {
"m": 0,
"ef_construct": 4,
"full_scan_threshold": 10,
"max_indexing_threads": 0,
"on_disk": true,
"memory": "cold",
"payload_m": 0,
"inline_storage": true
},
"quantization_config": null,
"sparse_vectors": {},
"strict_mode_config": {
"enabled": true,
"max_query_limit": 1,
"max_timeout": 1,
"unindexed_filtering_retrieve": true,
"unindexed_filtering_update": true,
"search_max_hnsw_ef": 0,
"search_allow_exact": true,
"search_max_oversampling": 0,
"upsert_max_batchsize": 0,
"search_max_batchsize": 0,
"max_collection_vector_size_bytes": 0,
"read_rate_limit": 1,
"write_rate_limit": 1,
"max_collection_payload_size_bytes": 0,
"max_points_count": 1,
"filter_max_conditions": 0,
"condition_max_size": 0,
"multivector_config": {},
"sparse_config": {},
"max_payload_index_count": 0,
"max_resident_memory_percent": 1
},
"metadata": {
"city": "London",
"color": "green"
}
}'const response = await fetch('{protocol}://{hostname}:{port}/collections/{collection_name}', {
method: 'PATCH',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
"vectors": {},
"optimizers_config": {
"deleted_threshold": 0,
"vacuum_min_vector_number": 100,
"default_segment_number": 0,
"max_segment_size": 1,
"memmap_threshold": 0,
"indexing_threshold": 0,
"flush_interval_sec": 0,
"max_optimization_threads": "auto",
"prevent_unoptimized": null
},
"params": {
"replication_factor": 1,
"write_consistency_factor": 1,
"read_fan_out_factor": 0,
"read_fan_out_delay_ms": 0,
"on_disk_payload": null,
"payload": {
"memory": "cold"
},
"id_tracker": {
"memory": "cold"
}
},
"hnsw_config": {
"m": 0,
"ef_construct": 4,
"full_scan_threshold": 10,
"max_indexing_threads": 0,
"on_disk": true,
"memory": "cold",
"payload_m": 0,
"inline_storage": true
},
"quantization_config": null,
"sparse_vectors": {},
"strict_mode_config": {
"enabled": true,
"max_query_limit": 1,
"max_timeout": 1,
"unindexed_filtering_retrieve": true,
"unindexed_filtering_update": true,
"search_max_hnsw_ef": 0,
"search_allow_exact": true,
"search_max_oversampling": 0,
"upsert_max_batchsize": 0,
"search_max_batchsize": 0,
"max_collection_vector_size_bytes": 0,
"read_rate_limit": 1,
"write_rate_limit": 1,
"max_collection_payload_size_bytes": 0,
"max_points_count": 1,
"filter_max_conditions": 0,
"condition_max_size": 0,
"multivector_config": {},
"sparse_config": {},
"max_payload_index_count": 0,
"max_resident_memory_percent": 1
},
"metadata": {
"city": "London",
"color": "green"
}
}),
});
const data = await response.json();import requests
payload = {
"vectors": {},
"optimizers_config": {
"deleted_threshold": 0,
"vacuum_min_vector_number": 100,
"default_segment_number": 0,
"max_segment_size": 1,
"memmap_threshold": 0,
"indexing_threshold": 0,
"flush_interval_sec": 0,
"max_optimization_threads": "auto",
"prevent_unoptimized": None
},
"params": {
"replication_factor": 1,
"write_consistency_factor": 1,
"read_fan_out_factor": 0,
"read_fan_out_delay_ms": 0,
"on_disk_payload": None,
"payload": {
"memory": "cold"
},
"id_tracker": {
"memory": "cold"
}
},
"hnsw_config": {
"m": 0,
"ef_construct": 4,
"full_scan_threshold": 10,
"max_indexing_threads": 0,
"on_disk": True,
"memory": "cold",
"payload_m": 0,
"inline_storage": True
},
"quantization_config": None,
"sparse_vectors": {},
"strict_mode_config": {
"enabled": True,
"max_query_limit": 1,
"max_timeout": 1,
"unindexed_filtering_retrieve": True,
"unindexed_filtering_update": True,
"search_max_hnsw_ef": 0,
"search_allow_exact": True,
"search_max_oversampling": 0,
"upsert_max_batchsize": 0,
"search_max_batchsize": 0,
"max_collection_vector_size_bytes": 0,
"read_rate_limit": 1,
"write_rate_limit": 1,
"max_collection_payload_size_bytes": 0,
"max_points_count": 1,
"filter_max_conditions": 0,
"condition_max_size": 0,
"multivector_config": {},
"sparse_config": {},
"max_payload_index_count": 0,
"max_resident_memory_percent": 1
},
"metadata": {
"city": "London",
"color": "green"
}
}
response = requests.patch('{protocol}://{hostname}:{port}/collections/{collection_name}', json=payload)
data = response.json(){
"vectors": {},
"optimizers_config": {
"deleted_threshold": 0,
"vacuum_min_vector_number": 100,
"default_segment_number": 0,
"max_segment_size": 1,
"memmap_threshold": 0,
"indexing_threshold": 0,
"flush_interval_sec": 0,
"max_optimization_threads": "auto",
"prevent_unoptimized": null
},
"params": {
"replication_factor": 1,
"write_consistency_factor": 1,
"read_fan_out_factor": 0,
"read_fan_out_delay_ms": 0,
"on_disk_payload": null,
"payload": {
"memory": "cold"
},
"id_tracker": {
"memory": "cold"
}
},
"hnsw_config": {
"m": 0,
"ef_construct": 4,
"full_scan_threshold": 10,
"max_indexing_threads": 0,
"on_disk": true,
"memory": "cold",
"payload_m": 0,
"inline_storage": true
},
"quantization_config": null,
"sparse_vectors": {},
"strict_mode_config": {
"enabled": true,
"max_query_limit": 1,
"max_timeout": 1,
"unindexed_filtering_retrieve": true,
"unindexed_filtering_update": true,
"search_max_hnsw_ef": 0,
"search_allow_exact": true,
"search_max_oversampling": 0,
"upsert_max_batchsize": 0,
"search_max_batchsize": 0,
"max_collection_vector_size_bytes": 0,
"read_rate_limit": 1,
"write_rate_limit": 1,
"max_collection_payload_size_bytes": 0,
"max_points_count": 1,
"filter_max_conditions": 0,
"condition_max_size": 0,
"multivector_config": {},
"sparse_config": {},
"max_payload_index_count": 0,
"max_resident_memory_percent": 1
},
"metadata": {
"city": "London",
"color": "green"
}
}{
"usage": null,
"time": 0.002,
"status": "ok",
"result": true
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Check the existence of a collection
Returns "true" if the given collection name exists, and "false" otherwise
Parameters
collection_namestringrequiredpathName of the collection
Response
successful operation
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X GET '{protocol}://{hostname}:{port}/collections/{collection_name}/exists'const response = await fetch('{protocol}://{hostname}:{port}/collections/{collection_name}/exists', {
method: 'GET',
});
const data = await response.json();import requests
response = requests.get('{protocol}://{hostname}:{port}/collections/{collection_name}/exists')
data = response.json(){
"usage": null,
"time": 0.002,
"status": "ok",
"result": {
"exists": true
}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Create named vector
Create a new named vector on an existing collection
Body
Vector configuration - dense or sparse
Configuration for creating a new named vector.
Contains only the immutable properties that define a vector space. Storage type, index, and quantization are determined automatically based on the segment type and can be configured separately later.
Example JSON for a dense vector: json { "dense": { "size": 768, "distance": "Cosine" } }
Example JSON for a sparse vector: json { "sparse": { "modifier": "Idf" } }
denseDenseVectorConfigrequiredConfiguration for creating a new dense named vector.
Only includes properties that define the vector space and cannot be changed after creation. Storage type, index type, and quantization are inferred.
sparseSparseVectorConfigrequiredConfiguration for creating a new sparse named vector.
Only includes properties that define the vector space and cannot be changed after creation.
Parameters
collection_namestringrequiredpathName of the collection
vector_namestringrequiredpathName of the vector to create
waitbooleanqueryIf true, wait for changes to actually happen
orderingWriteOrderingweakmediumstrongquerydefine ordering guarantees for the operation
timeoutinteger>= 1queryTimeout for the operation
Response
successful operation
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X PUT '{protocol}://{hostname}:{port}/collections/{collection_name}/vectors/{vector_name}' \
-H 'Content-Type: application/json' \
-d '{
"dense": {
"size": 1,
"distance": "Cosine",
"multivector_config": {
"comparator": "max_sim"
},
"datatype": "float32"
}
}'const response = await fetch('{protocol}://{hostname}:{port}/collections/{collection_name}/vectors/{vector_name}', {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
"dense": {
"size": 1,
"distance": "Cosine",
"multivector_config": {
"comparator": "max_sim"
},
"datatype": "float32"
}
}),
});
const data = await response.json();import requests
payload = {
"dense": {
"size": 1,
"distance": "Cosine",
"multivector_config": {
"comparator": "max_sim"
},
"datatype": "float32"
}
}
response = requests.put('{protocol}://{hostname}:{port}/collections/{collection_name}/vectors/{vector_name}', json=payload)
data = response.json(){
"dense": {
"size": 1,
"distance": "Cosine",
"multivector_config": {
"comparator": "max_sim"
},
"datatype": "float32"
}
}{
"usage": null,
"time": 0.002,
"status": "ok",
"result": {
"operation_id": 0,
"status": "acknowledged"
}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Delete named vector
Delete a named vector from a collection
Parameters
collection_namestringrequiredpathName of the collection
vector_namestringrequiredpathName of the vector to delete
waitbooleanqueryIf true, wait for changes to actually happen
orderingWriteOrderingweakmediumstrongquerydefine ordering guarantees for the operation
timeoutinteger>= 1queryTimeout for the operation
Response
successful operation
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X DELETE '{protocol}://{hostname}:{port}/collections/{collection_name}/vectors/{vector_name}'const response = await fetch('{protocol}://{hostname}:{port}/collections/{collection_name}/vectors/{vector_name}', {
method: 'DELETE',
});
const data = await response.json();import requests
response = requests.delete('{protocol}://{hostname}:{port}/collections/{collection_name}/vectors/{vector_name}')
data = response.json(){
"usage": null,
"time": 0.002,
"status": "ok",
"result": {
"operation_id": 0,
"status": "acknowledged"
}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Get optimization progress
Get progress of ongoing and completed optimizations for a collection
Parameters
collection_namestringrequiredpathName of the collection
withstringqueryComma-separated list of optional fields to include in the response. Possible values: queued, completed, idle_segments.
completed_limitinteger>= 016queryMaximum number of completed optimizations to return.
Ignored if completed is not in the with parameter.
Response
successful operation
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X GET '{protocol}://{hostname}:{port}/collections/{collection_name}/optimizations'const response = await fetch('{protocol}://{hostname}:{port}/collections/{collection_name}/optimizations', {
method: 'GET',
});
const data = await response.json();import requests
response = requests.get('{protocol}://{hostname}:{port}/collections/{collection_name}/optimizations')
data = response.json(){
"usage": null,
"time": 0.002,
"status": "ok"
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Points
Float-point vectors with payload.
Get point
Retrieve full information of single point by id
Parameters
collection_namestringrequiredpathName of the collection to retrieve from
idinteger | stringrequiredpathId of the point
consistencyinteger | ReadConsistencyTypequeryDefine read consistency guarantees for the operation
timeoutinteger>= 1queryIf set, overrides global timeout for this request. Unit is seconds.
Response
successful operation
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X GET '{protocol}://{hostname}:{port}/collections/{collection_name}/points/{id}'const response = await fetch('{protocol}://{hostname}:{port}/collections/{collection_name}/points/{id}', {
method: 'GET',
});
const data = await response.json();import requests
response = requests.get('{protocol}://{hostname}:{port}/collections/{collection_name}/points/{id}')
data = response.json(){
"usage": null,
"time": 0.002,
"status": "ok",
"result": {
"id": 42,
"payload": {
"city": "London",
"color": "green"
},
"vector": [
0.875,
0.140625,
0.897599995136261
],
"shard_key": "region_1",
"order_value": 42
}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Get points
Retrieve multiple points by specified IDs
Body
List of points to retrieve
shard_keystring | integer | Array<ShardKey> | ShardKeyWithFallback | anySpecify in which shards to look for the points, if not specified - look in all shards
idsArray<ExtendedPointId>requiredLook for points with ids
with_payloadboolean | Array<string> | PayloadSelectorInclude | PayloadSelectorExclude | anySelect which payload to return with the response. Default is true.
with_vectorboolean | Array<string>Options for specifying which vector to include
Parameters
collection_namestringrequiredpathName of the collection to retrieve from
consistencyinteger | ReadConsistencyTypequeryDefine read consistency guarantees for the operation
timeoutinteger>= 1queryIf set, overrides global timeout for this request. Unit is seconds.
Response
successful operation
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X POST '{protocol}://{hostname}:{port}/collections/{collection_name}/points' \
-H 'Content-Type: application/json' \
-d '{
"shard_key": "region_1",
"ids": [
42
],
"with_payload": true,
"with_vector": true
}'const response = await fetch('{protocol}://{hostname}:{port}/collections/{collection_name}/points', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
"shard_key": "region_1",
"ids": [
42
],
"with_payload": true,
"with_vector": true
}),
});
const data = await response.json();import requests
payload = {
"shard_key": "region_1",
"ids": [
42
],
"with_payload": True,
"with_vector": True
}
response = requests.post('{protocol}://{hostname}:{port}/collections/{collection_name}/points', json=payload)
data = response.json(){
"shard_key": "region_1",
"ids": [
42
],
"with_payload": true,
"with_vector": true
}{
"usage": null,
"time": 0.002,
"status": "ok",
"result": [
{
"id": 42,
"payload": {
"city": "London",
"color": "green"
},
"vector": [
0.875,
0.140625,
0.897599995136261
],
"shard_key": "region_1",
"order_value": 42
}
]
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Upsert points
Perform insert + updates on points. If point with given ID already exists - it will be overwritten.
Body
Operation to perform on points
Parameters
collection_namestringrequiredpathName of the collection to update from
waitbooleanqueryIf true, wait for changes to actually happen
orderingWriteOrderingweakmediumstrongquerydefine ordering guarantees for the operation
timeoutinteger>= 1queryTimeout for the operation
Response
successful operation
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X PUT '{protocol}://{hostname}:{port}/collections/{collection_name}/points' \
-H 'Content-Type: application/json'const response = await fetch('{protocol}://{hostname}:{port}/collections/{collection_name}/points', {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
},
});
const data = await response.json();import requests
response = requests.put('{protocol}://{hostname}:{port}/collections/{collection_name}/points', headers={'Content-Type': 'application/json'})
data = response.json(){
"usage": null,
"time": 0.002,
"status": "ok",
"result": {
"operation_id": 0,
"status": "acknowledged"
}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Delete points
Delete points
Body
Operation to perform on points
Parameters
collection_namestringrequiredpathName of the collection to delete from
waitbooleanqueryIf true, wait for changes to actually happen
orderingWriteOrderingweakmediumstrongquerydefine ordering guarantees for the operation
timeoutinteger>= 1queryTimeout for the operation
Response
successful operation
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X POST '{protocol}://{hostname}:{port}/collections/{collection_name}/points/delete' \
-H 'Content-Type: application/json'const response = await fetch('{protocol}://{hostname}:{port}/collections/{collection_name}/points/delete', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
});
const data = await response.json();import requests
response = requests.post('{protocol}://{hostname}:{port}/collections/{collection_name}/points/delete', headers={'Content-Type': 'application/json'})
data = response.json(){
"usage": null,
"time": 0.002,
"status": "ok",
"result": {
"operation_id": 0,
"status": "acknowledged"
}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Update vectors
Update specified named vectors on points, keep unspecified vectors intact.
Body
Update named vectors on points
Parameters
collection_namestringrequiredpathName of the collection to update from
waitbooleanqueryIf true, wait for changes to actually happen
orderingWriteOrderingweakmediumstrongquerydefine ordering guarantees for the operation
timeoutinteger>= 1queryTimeout for the operation
Response
successful operation
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X PUT '{protocol}://{hostname}:{port}/collections/{collection_name}/points/vectors' \
-H 'Content-Type: application/json'const response = await fetch('{protocol}://{hostname}:{port}/collections/{collection_name}/points/vectors', {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
},
});
const data = await response.json();import requests
response = requests.put('{protocol}://{hostname}:{port}/collections/{collection_name}/points/vectors', headers={'Content-Type': 'application/json'})
data = response.json(){
"usage": null,
"time": 0.002,
"status": "ok",
"result": {
"operation_id": 0,
"status": "acknowledged"
}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Delete vectors
Delete named vectors from the given points.
Body
Delete named vectors from points
Parameters
collection_namestringrequiredpathName of the collection to delete from
waitbooleanqueryIf true, wait for changes to actually happen
orderingWriteOrderingweakmediumstrongquerydefine ordering guarantees for the operation
timeoutinteger>= 1queryTimeout for the operation
Response
successful operation
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X POST '{protocol}://{hostname}:{port}/collections/{collection_name}/points/vectors/delete' \
-H 'Content-Type: application/json'const response = await fetch('{protocol}://{hostname}:{port}/collections/{collection_name}/points/vectors/delete', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
});
const data = await response.json();import requests
response = requests.post('{protocol}://{hostname}:{port}/collections/{collection_name}/points/vectors/delete', headers={'Content-Type': 'application/json'})
data = response.json(){
"usage": null,
"time": 0.002,
"status": "ok",
"result": {
"operation_id": 0,
"status": "acknowledged"
}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Set payload
Set payload values for points
Body
Set payload on points
Parameters
collection_namestringrequiredpathName of the collection to set from
waitbooleanqueryIf true, wait for changes to actually happen
orderingWriteOrderingweakmediumstrongquerydefine ordering guarantees for the operation
timeoutinteger>= 1queryTimeout for the operation
Response
successful operation
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X POST '{protocol}://{hostname}:{port}/collections/{collection_name}/points/payload' \
-H 'Content-Type: application/json'const response = await fetch('{protocol}://{hostname}:{port}/collections/{collection_name}/points/payload', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
});
const data = await response.json();import requests
response = requests.post('{protocol}://{hostname}:{port}/collections/{collection_name}/points/payload', headers={'Content-Type': 'application/json'})
data = response.json(){
"usage": null,
"time": 0.002,
"status": "ok",
"result": {
"operation_id": 0,
"status": "acknowledged"
}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Overwrite payload
Replace full payload of points with new one
Body
Payload and points selector
Parameters
collection_namestringrequiredpathName of the collection to set from
waitbooleanqueryIf true, wait for changes to actually happen
orderingWriteOrderingweakmediumstrongquerydefine ordering guarantees for the operation
timeoutinteger>= 1queryTimeout for the operation
Response
successful operation
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X PUT '{protocol}://{hostname}:{port}/collections/{collection_name}/points/payload' \
-H 'Content-Type: application/json'const response = await fetch('{protocol}://{hostname}:{port}/collections/{collection_name}/points/payload', {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
},
});
const data = await response.json();import requests
response = requests.put('{protocol}://{hostname}:{port}/collections/{collection_name}/points/payload', headers={'Content-Type': 'application/json'})
data = response.json(){
"usage": null,
"time": 0.002,
"status": "ok",
"result": {
"operation_id": 0,
"status": "acknowledged"
}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Delete payload
Delete specified key payload for points
Body
delete payload on points
Parameters
collection_namestringrequiredpathName of the collection to delete from
waitbooleanqueryIf true, wait for changes to actually happen
orderingWriteOrderingweakmediumstrongquerydefine ordering guarantees for the operation
timeoutinteger>= 1queryTimeout for the operation
Response
successful operation
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X POST '{protocol}://{hostname}:{port}/collections/{collection_name}/points/payload/delete' \
-H 'Content-Type: application/json'const response = await fetch('{protocol}://{hostname}:{port}/collections/{collection_name}/points/payload/delete', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
});
const data = await response.json();import requests
response = requests.post('{protocol}://{hostname}:{port}/collections/{collection_name}/points/payload/delete', headers={'Content-Type': 'application/json'})
data = response.json(){
"usage": null,
"time": 0.002,
"status": "ok",
"result": {
"operation_id": 0,
"status": "acknowledged"
}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Clear payload
Remove all payload for specified points
Body
clear payload on points
Parameters
collection_namestringrequiredpathName of the collection to clear payload from
waitbooleanqueryIf true, wait for changes to actually happen
orderingWriteOrderingweakmediumstrongquerydefine ordering guarantees for the operation
timeoutinteger>= 1queryTimeout for the operation
Response
successful operation
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X POST '{protocol}://{hostname}:{port}/collections/{collection_name}/points/payload/clear' \
-H 'Content-Type: application/json'const response = await fetch('{protocol}://{hostname}:{port}/collections/{collection_name}/points/payload/clear', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
});
const data = await response.json();import requests
response = requests.post('{protocol}://{hostname}:{port}/collections/{collection_name}/points/payload/clear', headers={'Content-Type': 'application/json'})
data = response.json(){
"usage": null,
"time": 0.002,
"status": "ok",
"result": {
"operation_id": 0,
"status": "acknowledged"
}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Batch update points
Apply a series of update operations for points, vectors and payloads
Body
update operations
Parameters
collection_namestringrequiredpathName of the collection to apply operations on
waitbooleanqueryIf true, wait for changes to actually happen
orderingWriteOrderingweakmediumstrongquerydefine ordering guarantees for the operation
timeoutinteger>= 1queryTimeout for the operation
Response
successful operation
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X POST '{protocol}://{hostname}:{port}/collections/{collection_name}/points/batch' \
-H 'Content-Type: application/json'const response = await fetch('{protocol}://{hostname}:{port}/collections/{collection_name}/points/batch', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
});
const data = await response.json();import requests
response = requests.post('{protocol}://{hostname}:{port}/collections/{collection_name}/points/batch', headers={'Content-Type': 'application/json'})
data = response.json(){
"usage": null,
"time": 0.002,
"status": "ok",
"result": [
{
"operation_id": 0,
"status": "acknowledged"
}
]
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Scroll points
Scroll request - paginate over all points which matches given filtering condition
Body
Pagination and filter parameters
Parameters
collection_namestringrequiredpathName of the collection to retrieve from
consistencyinteger | ReadConsistencyTypequeryDefine read consistency guarantees for the operation
timeoutinteger>= 1queryIf set, overrides global timeout for this request. Unit is seconds.
Response
successful operation
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X POST '{protocol}://{hostname}:{port}/collections/{collection_name}/points/scroll' \
-H 'Content-Type: application/json'const response = await fetch('{protocol}://{hostname}:{port}/collections/{collection_name}/points/scroll', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
});
const data = await response.json();import requests
response = requests.post('{protocol}://{hostname}:{port}/collections/{collection_name}/points/scroll', headers={'Content-Type': 'application/json'})
data = response.json(){
"usage": null,
"time": 0.002,
"status": "ok",
"result": {
"points": [
{
"id": 40,
"payload": {
"city": "London",
"color": "green"
},
"vector": [
0.875,
0.140625,
0.897599995136261
],
"shard_key": "region_1"
},
{
"id": 41,
"payload": {
"city": "Paris",
"color": "red"
},
"vector": [
0.75,
0.640625,
0.8945000171661377
],
"shard_key": "region_1"
}
],
"next_page_offset": 42
}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Count points
Count points which matches given filtering condition
Body
Request counts of points which matches given filtering condition
Parameters
collection_namestringrequiredpathName of the collection to count in
consistencyinteger | ReadConsistencyTypequeryDefine read consistency guarantees for the operation
timeoutinteger>= 1queryIf set, overrides global timeout for this request. Unit is seconds.
Response
successful operation
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X POST '{protocol}://{hostname}:{port}/collections/{collection_name}/points/count' \
-H 'Content-Type: application/json'const response = await fetch('{protocol}://{hostname}:{port}/collections/{collection_name}/points/count', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
});
const data = await response.json();import requests
response = requests.post('{protocol}://{hostname}:{port}/collections/{collection_name}/points/count', headers={'Content-Type': 'application/json'})
data = response.json(){
"usage": null,
"time": 0.002,
"status": "ok",
"result": {
"count": 0
}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Facet a payload key with a given filter.
Count points that satisfy the given filter for each unique value of a payload key.
Body
Request counts of points for each unique value of a payload key
Parameters
collection_namestringrequiredpathName of the collection to facet in
consistencyinteger | ReadConsistencyTypequeryDefine read consistency guarantees for the operation
timeoutinteger>= 1queryIf set, overrides global timeout for this request. Unit is seconds.
Response
successful operation
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X POST '{protocol}://{hostname}:{port}/collections/{collection_name}/facet' \
-H 'Content-Type: application/json'const response = await fetch('{protocol}://{hostname}:{port}/collections/{collection_name}/facet', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
});
const data = await response.json();import requests
response = requests.post('{protocol}://{hostname}:{port}/collections/{collection_name}/facet', headers={'Content-Type': 'application/json'})
data = response.json(){
"usage": null,
"time": 0.002,
"status": "ok",
"result": {
"hits": [
{
"value": "string",
"count": 0
}
]
}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Search
Find points in a collection.
Query points
Universally query points. This endpoint covers all capabilities of search, recommend, discover, filters. But also enables hybrid and multi-stage queries.
Body
Describes the query to make to the collection
Parameters
collection_namestringrequiredpathName of the collection to query
consistencyinteger | ReadConsistencyTypequeryDefine read consistency guarantees for the operation
timeoutinteger>= 1queryIf set, overrides global timeout for this request. Unit is seconds.
Response
successful operation
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X POST '{protocol}://{hostname}:{port}/collections/{collection_name}/points/query' \
-H 'Content-Type: application/json'const response = await fetch('{protocol}://{hostname}:{port}/collections/{collection_name}/points/query', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
});
const data = await response.json();import requests
response = requests.post('{protocol}://{hostname}:{port}/collections/{collection_name}/points/query', headers={'Content-Type': 'application/json'})
data = response.json(){
"usage": null,
"time": 0.002,
"status": "ok",
"result": {
"points": [
{
"id": 42,
"version": 3,
"score": 0.75,
"payload": {
"city": "London",
"color": "green"
},
"vector": [
0.875,
0.140625,
0.897599995136261
],
"shard_key": "region_1",
"order_value": 42
}
]
}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Query points in batch
Universally query points in batch. This endpoint covers all capabilities of search, recommend, discover, filters. But also enables hybrid and multi-stage queries.
Body
Describes the queries to make to the collection
Parameters
collection_namestringrequiredpathName of the collection to query
consistencyinteger | ReadConsistencyTypequeryDefine read consistency guarantees for the operation
timeoutinteger>= 1queryIf set, overrides global timeout for this request. Unit is seconds.
Response
successful operation
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X POST '{protocol}://{hostname}:{port}/collections/{collection_name}/points/query/batch' \
-H 'Content-Type: application/json'const response = await fetch('{protocol}://{hostname}:{port}/collections/{collection_name}/points/query/batch', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
});
const data = await response.json();import requests
response = requests.post('{protocol}://{hostname}:{port}/collections/{collection_name}/points/query/batch', headers={'Content-Type': 'application/json'})
data = response.json(){
"usage": null,
"time": 0.002,
"status": "ok",
"result": [
{
"points": [
{
"id": 42,
"version": 3,
"score": 0.75,
"payload": {
"city": "London",
"color": "green"
},
"vector": [
0.875,
0.140625,
0.897599995136261
],
"shard_key": "region_1",
"order_value": 42
}
]
}
]
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Query points, grouped by a given payload field
Universally query points, grouped by a given payload field
Body
Describes the query to make to the collection
Parameters
collection_namestringrequiredpathName of the collection to query
consistencyinteger | ReadConsistencyTypequeryDefine read consistency guarantees for the operation
timeoutinteger>= 1queryIf set, overrides global timeout for this request. Unit is seconds.
Response
successful operation
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X POST '{protocol}://{hostname}:{port}/collections/{collection_name}/points/query/groups' \
-H 'Content-Type: application/json'const response = await fetch('{protocol}://{hostname}:{port}/collections/{collection_name}/points/query/groups', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
});
const data = await response.json();import requests
response = requests.post('{protocol}://{hostname}:{port}/collections/{collection_name}/points/query/groups', headers={'Content-Type': 'application/json'})
data = response.json(){
"usage": null,
"time": 0.002,
"status": "ok",
"result": {
"groups": [
{
"hits": [
{
"id": 42,
"version": 3,
"score": 0.75,
"payload": {
"city": "London",
"color": "green"
},
"vector": [
0.875,
0.140625,
0.897599995136261
],
"shard_key": "region_1",
"order_value": 42
}
],
"id": "string",
"lookup": {
"id": 42,
"payload": {
"city": "London",
"color": "green"
},
"vector": [
0.875,
0.140625,
0.897599995136261
],
"shard_key": "region_1",
"order_value": 42
}
}
]
}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Search points matrix distance pairs
Compute distance matrix for sampled points with a pair based output format
Body
Search matrix request with optional filtering
Parameters
collection_namestringrequiredpathName of the collection to search in
consistencyinteger | ReadConsistencyTypequeryDefine read consistency guarantees for the operation
timeoutinteger>= 1queryIf set, overrides global timeout for this request. Unit is seconds.
Response
successful operation
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X POST '{protocol}://{hostname}:{port}/collections/{collection_name}/points/search/matrix/pairs' \
-H 'Content-Type: application/json'const response = await fetch('{protocol}://{hostname}:{port}/collections/{collection_name}/points/search/matrix/pairs', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
});
const data = await response.json();import requests
response = requests.post('{protocol}://{hostname}:{port}/collections/{collection_name}/points/search/matrix/pairs', headers={'Content-Type': 'application/json'})
data = response.json(){
"usage": null,
"time": 0.002,
"status": "ok",
"result": {
"pairs": [
{
"a": 42,
"b": 42,
"score": 0
}
]
}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Search points matrix distance offsets
Compute distance matrix for sampled points with an offset based output format
Body
Search matrix request with optional filtering
Parameters
collection_namestringrequiredpathName of the collection to search in
consistencyinteger | ReadConsistencyTypequeryDefine read consistency guarantees for the operation
timeoutinteger>= 1queryIf set, overrides global timeout for this request. Unit is seconds.
Response
successful operation
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X POST '{protocol}://{hostname}:{port}/collections/{collection_name}/points/search/matrix/offsets' \
-H 'Content-Type: application/json'const response = await fetch('{protocol}://{hostname}:{port}/collections/{collection_name}/points/search/matrix/offsets', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
});
const data = await response.json();import requests
response = requests.post('{protocol}://{hostname}:{port}/collections/{collection_name}/points/search/matrix/offsets', headers={'Content-Type': 'application/json'})
data = response.json(){
"usage": null,
"time": 0.002,
"status": "ok",
"result": {
"offsets_row": [
0
],
"offsets_col": [
0
],
"scores": [
0
],
"ids": [
42
]
}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Aliases
Additional names for existing collections.
Update aliases of the collections
Body
Alias update operations
Operation for performing changes of collection aliases. Alias changes are atomic, meaning that no collection modifications can happen between alias operations.
actionsArray<AliasOperations>requiredParameters
timeoutinteger>= 1queryWait for operation commit timeout in seconds. If timeout is reached - request will return with service error.
Response
successful operation
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X POST '{protocol}://{hostname}:{port}/collections/aliases' \
-H 'Content-Type: application/json' \
-d '{
"actions": [
{
"create_alias": {
"collection_name": "string",
"alias_name": "string"
}
}
]
}'const response = await fetch('{protocol}://{hostname}:{port}/collections/aliases', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
"actions": [
{
"create_alias": {
"collection_name": "string",
"alias_name": "string"
}
}
]
}),
});
const data = await response.json();import requests
payload = {
"actions": [
{
"create_alias": {
"collection_name": "string",
"alias_name": "string"
}
}
]
}
response = requests.post('{protocol}://{hostname}:{port}/collections/aliases', json=payload)
data = response.json(){
"actions": [
{
"create_alias": {
"collection_name": "string",
"alias_name": "string"
}
}
]
}{
"usage": null,
"time": 0.002,
"status": "ok",
"result": true
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}List aliases for collection
Get list of all aliases for a collection
Parameters
collection_namestringrequiredpathName of the collection
Response
successful operation
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X GET '{protocol}://{hostname}:{port}/collections/{collection_name}/aliases'const response = await fetch('{protocol}://{hostname}:{port}/collections/{collection_name}/aliases', {
method: 'GET',
});
const data = await response.json();import requests
response = requests.get('{protocol}://{hostname}:{port}/collections/{collection_name}/aliases')
data = response.json(){
"usage": null,
"time": 0.002,
"status": "ok",
"result": {
"aliases": [
{
"alias_name": "blogs-title",
"collection_name": "arivx-title"
}
]
}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}List collections aliases
Get list of all existing collections aliases
Response
successful operation
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X GET '{protocol}://{hostname}:{port}/aliases'const response = await fetch('{protocol}://{hostname}:{port}/aliases', {
method: 'GET',
});
const data = await response.json();import requests
response = requests.get('{protocol}://{hostname}:{port}/aliases')
data = response.json(){
"usage": null,
"time": 0.002,
"status": "ok",
"result": {
"aliases": [
{
"alias_name": "blogs-title",
"collection_name": "arivx-title"
}
]
}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Indexes
Indexes for payloads associated with points.
Create index for field in collection
Create index for field in collection
Body
Field name
field_namestringrequiredfield_schemaPayloadSchemaType | KeywordIndexParams | IntegerIndexParams | FloatIndexParams | GeoIndexParams | TextIndexParams | BoolIndexParams | DatetimeIndexParams | UuidIndexParams | anyParameters
collection_namestringrequiredpathName of the collection
waitbooleanqueryIf true, wait for changes to actually happen
orderingWriteOrderingweakmediumstrongquerydefine ordering guarantees for the operation
timeoutinteger>= 1queryTimeout for the operation
Response
successful operation
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X PUT '{protocol}://{hostname}:{port}/collections/{collection_name}/index' \
-H 'Content-Type: application/json' \
-d '{
"field_name": "string",
"field_schema": "keyword"
}'const response = await fetch('{protocol}://{hostname}:{port}/collections/{collection_name}/index', {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
"field_name": "string",
"field_schema": "keyword"
}),
});
const data = await response.json();import requests
payload = {
"field_name": "string",
"field_schema": "keyword"
}
response = requests.put('{protocol}://{hostname}:{port}/collections/{collection_name}/index', json=payload)
data = response.json(){
"field_name": "string",
"field_schema": "keyword"
}{
"usage": null,
"time": 0.002,
"status": "ok",
"result": {
"operation_id": 0,
"status": "acknowledged"
}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Delete index for field in collection
Delete field index for collection
Parameters
collection_namestringrequiredpathName of the collection
field_namestringrequiredpathName of the field where to delete the index
waitbooleanqueryIf true, wait for changes to actually happen
orderingWriteOrderingweakmediumstrongquerydefine ordering guarantees for the operation
timeoutinteger>= 1queryTimeout for the operation
Response
successful operation
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X DELETE '{protocol}://{hostname}:{port}/collections/{collection_name}/index/{field_name}'const response = await fetch('{protocol}://{hostname}:{port}/collections/{collection_name}/index/{field_name}', {
method: 'DELETE',
});
const data = await response.json();import requests
response = requests.delete('{protocol}://{hostname}:{port}/collections/{collection_name}/index/{field_name}')
data = response.json(){
"usage": null,
"time": 0.002,
"status": "ok",
"result": {
"operation_id": 0,
"status": "acknowledged"
}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Distributed
Service distributed setup.
List shard keys
Parameters
collection_namestringrequiredpathName of the collection to list shard keys for
Response
successful operation
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X GET '{protocol}://{hostname}:{port}/collections/{collection_name}/shards'const response = await fetch('{protocol}://{hostname}:{port}/collections/{collection_name}/shards', {
method: 'GET',
});
const data = await response.json();import requests
response = requests.get('{protocol}://{hostname}:{port}/collections/{collection_name}/shards')
data = response.json(){
"usage": null,
"time": 0.002,
"status": "ok",
"result": {
"shard_keys": [
{
"key": "region_1"
}
]
}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Create shard key
Body
Shard key configuration
shard_keystring | integerrequiredshards_numberinteger<uint32> | null>= 1How many shards to create for this key If not specified, will use the default value from config
replication_factorinteger<uint32> | null>= 1How many replicas to create for each shard If not specified, will use the default value from config
placementArray<integer> | nullPlacement of shards for this key List of peer ids, that can be used to place shards for this key If not specified, will be randomly placed among all peers
initial_stateReplicaState | anyInitial state of the shards for this key If not specified, will be Initializing first and then Active Warning: do not change this unless you know what you are doing
Parameters
collection_namestringrequiredpathName of the collection to create shards for
timeoutinteger>= 1queryWait for operation commit timeout in seconds. If timeout is reached - request will return with service error.
Response
successful operation
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X PUT '{protocol}://{hostname}:{port}/collections/{collection_name}/shards' \
-H 'Content-Type: application/json' \
-d '{
"shard_key": "region_1",
"shards_number": 1,
"replication_factor": 1,
"placement": [
0
],
"initial_state": "Active"
}'const response = await fetch('{protocol}://{hostname}:{port}/collections/{collection_name}/shards', {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
"shard_key": "region_1",
"shards_number": 1,
"replication_factor": 1,
"placement": [
0
],
"initial_state": "Active"
}),
});
const data = await response.json();import requests
payload = {
"shard_key": "region_1",
"shards_number": 1,
"replication_factor": 1,
"placement": [
0
],
"initial_state": "Active"
}
response = requests.put('{protocol}://{hostname}:{port}/collections/{collection_name}/shards', json=payload)
data = response.json(){
"shard_key": "region_1",
"shards_number": 1,
"replication_factor": 1,
"placement": [
0
],
"initial_state": "Active"
}{
"usage": null,
"time": 0.002,
"status": "ok",
"result": true
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Delete shard key
Body
Select shard key to delete
shard_keystring | integerrequiredParameters
collection_namestringrequiredpathName of the collection to create shards for
timeoutinteger>= 1queryWait for operation commit timeout in seconds. If timeout is reached - request will return with service error.
Response
successful operation
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X POST '{protocol}://{hostname}:{port}/collections/{collection_name}/shards/delete' \
-H 'Content-Type: application/json' \
-d '{
"shard_key": "region_1"
}'const response = await fetch('{protocol}://{hostname}:{port}/collections/{collection_name}/shards/delete', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
"shard_key": "region_1"
}),
});
const data = await response.json();import requests
payload = {
"shard_key": "region_1"
}
response = requests.post('{protocol}://{hostname}:{port}/collections/{collection_name}/shards/delete', json=payload)
data = response.json(){
"shard_key": "region_1"
}{
"usage": null,
"time": 0.002,
"status": "ok",
"result": true
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Get cluster status info
Get information about the current state and composition of the cluster
Response
successful operation
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X GET '{protocol}://{hostname}:{port}/cluster'const response = await fetch('{protocol}://{hostname}:{port}/cluster', {
method: 'GET',
});
const data = await response.json();import requests
response = requests.get('{protocol}://{hostname}:{port}/cluster')
data = response.json(){
"usage": null,
"time": 0.002,
"status": "ok",
"result": {
"status": "disabled"
}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Collect cluster telemetry data
Get telemetry data, from the point of view of the cluster. This includes peers info, collections info, shard transfers, and resharding status
Parameters
details_levelintegerqueryThe level of detail to include in the response
timeoutinteger>= 160queryTimeout for this request
Response
successful operation
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X GET '{protocol}://{hostname}:{port}/cluster/telemetry'const response = await fetch('{protocol}://{hostname}:{port}/cluster/telemetry', {
method: 'GET',
});
const data = await response.json();import requests
response = requests.get('{protocol}://{hostname}:{port}/cluster/telemetry')
data = response.json(){
"usage": null,
"time": 0.002,
"status": "ok",
"result": {
"collections": {},
"cluster": {
"enabled": true,
"number_of_peers": 0,
"peers": {}
}
}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Tries to recover current peer Raft state.
Response
successful operation
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X POST '{protocol}://{hostname}:{port}/cluster/recover'const response = await fetch('{protocol}://{hostname}:{port}/cluster/recover', {
method: 'POST',
});
const data = await response.json();import requests
response = requests.post('{protocol}://{hostname}:{port}/cluster/recover')
data = response.json(){
"usage": null,
"time": 0.002,
"status": "ok",
"result": true
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Remove peer from the cluster
Tries to remove peer from the cluster. Will return an error if peer has shards on it.
Parameters
peer_idintegerrequiredpathId of the peer
timeoutinteger>= 1queryWait for operation commit timeout in seconds. If timeout is reached - request will return with service error.
forcebooleanfalsequeryIf true - removes peer even if it has shards/replicas on it.
Response
successful operation
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X DELETE '{protocol}://{hostname}:{port}/cluster/peer/{peer_id}'const response = await fetch('{protocol}://{hostname}:{port}/cluster/peer/{peer_id}', {
method: 'DELETE',
});
const data = await response.json();import requests
response = requests.delete('{protocol}://{hostname}:{port}/cluster/peer/{peer_id}')
data = response.json(){
"usage": null,
"time": 0.002,
"status": "ok",
"result": true
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Collection cluster info
Get cluster information for a collection
Parameters
collection_namestringrequiredpathName of the collection to retrieve the cluster info for
Response
successful operation
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X GET '{protocol}://{hostname}:{port}/collections/{collection_name}/cluster'const response = await fetch('{protocol}://{hostname}:{port}/collections/{collection_name}/cluster', {
method: 'GET',
});
const data = await response.json();import requests
response = requests.get('{protocol}://{hostname}:{port}/collections/{collection_name}/cluster')
data = response.json(){
"usage": null,
"time": 0.002,
"status": "ok",
"result": {
"peer_id": 0,
"shard_count": 0,
"local_shards": [
{
"shard_id": 0,
"shard_key": "region_1",
"points_count": 0,
"state": "Active"
}
],
"remote_shards": [
{
"shard_id": 0,
"shard_key": "region_1",
"peer_id": 0,
"state": "Active"
}
],
"shard_transfers": [
{
"shard_id": 0,
"to_shard_id": 0,
"from": 0,
"to": 0,
"sync": true,
"method": "stream_records",
"comment": "string"
}
],
"resharding_operations": [
{
"direction": "up",
"shard_id": 0,
"peer_id": 0,
"shard_key": "region_1"
}
]
}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Update collection cluster setup
Body
Collection cluster update operations
Parameters
collection_namestringrequiredpathName of the collection on which to to apply the cluster update operation
timeoutinteger>= 1queryWait for operation commit timeout in seconds. If timeout is reached - request will return with service error.
Response
successful operation
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X POST '{protocol}://{hostname}:{port}/collections/{collection_name}/cluster' \
-H 'Content-Type: application/json'const response = await fetch('{protocol}://{hostname}:{port}/collections/{collection_name}/cluster', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
});
const data = await response.json();import requests
response = requests.post('{protocol}://{hostname}:{port}/collections/{collection_name}/cluster', headers={'Content-Type': 'application/json'})
data = response.json(){
"usage": null,
"time": 0.002,
"status": "ok",
"result": true
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Snapshots
Storage and collections snapshots.
Recover from an uploaded snapshot
Recover local collection data from an uploaded snapshot. This will overwrite any data, stored on this node, for the collection. If collection does not exist - it will be created.
Body
Snapshot to recover from
snapshotstring<binary>Parameters
collection_namestringrequiredpathName of the collection
waitbooleanqueryIf true, wait for changes to actually happen. If false - let changes happen in background. Default is true.
prioritySnapshotPriorityno_syncsnapshotreplicaqueryDefines source of truth for snapshot recovery
checksumstringqueryOptional SHA256 checksum to verify snapshot integrity before recovery.
Response
successful operation
operation is accepted
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X POST '{protocol}://{hostname}:{port}/collections/{collection_name}/snapshots/upload' \
-H 'Content-Type: multipart/form-data' \
-d '{
"snapshot": "<binary>"
}'const response = await fetch('{protocol}://{hostname}:{port}/collections/{collection_name}/snapshots/upload', {
method: 'POST',
headers: {
'Content-Type': 'multipart/form-data',
},
body: JSON.stringify({
"snapshot": "<binary>"
}),
});
const data = await response.json();import requests
payload = {
"snapshot": "<binary>"
}
response = requests.post('{protocol}://{hostname}:{port}/collections/{collection_name}/snapshots/upload', json=payload)
data = response.json(){
"snapshot": "<binary>"
}{
"time": 0.002,
"status": "ok",
"result": true
}{
"time": 0,
"status": "string"
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Recover from a snapshot
Recover local collection data from a snapshot. This will overwrite any data, stored on this node, for the collection. If collection does not exist - it will be created.
Body
Snapshot to recover from
locationstring<uri>requiredExamples: - URL http://localhost:8080/collections/my_collection/snapshots/my_snapshot - Local path file:///qdrant/snapshots/test_collection-2022-08-04-10-49-10.snapshot
prioritySnapshotPriority | anynullDefines which data should be used as a source of truth if there are other replicas in the cluster. If set to Snapshot, the snapshot will be used as a source of truth, and the current state will be overwritten. If set to Replica, the current state will be used as a source of truth, and after recovery it will be synchronized from other replicas.
checksumstring | nullnullOptional SHA256 checksum to verify snapshot integrity before recovery.
api_keystring | nullnullOptional API key used when fetching the snapshot from a remote URL.
Parameters
collection_namestringrequiredpathName of the collection
waitbooleanqueryIf true, wait for changes to actually happen. If false - let changes happen in background. Default is true.
Response
successful operation
operation is accepted
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X PUT '{protocol}://{hostname}:{port}/collections/{collection_name}/snapshots/recover' \
-H 'Content-Type: application/json' \
-d '{
"location": "https://example.com",
"priority": null,
"checksum": null,
"api_key": null
}'const response = await fetch('{protocol}://{hostname}:{port}/collections/{collection_name}/snapshots/recover', {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
"location": "https://example.com",
"priority": null,
"checksum": null,
"api_key": null
}),
});
const data = await response.json();import requests
payload = {
"location": "https://example.com",
"priority": None,
"checksum": None,
"api_key": None
}
response = requests.put('{protocol}://{hostname}:{port}/collections/{collection_name}/snapshots/recover', json=payload)
data = response.json(){
"location": "https://example.com",
"priority": null,
"checksum": null,
"api_key": null
}{
"time": 0.002,
"status": "ok",
"result": true
}{
"time": 0,
"status": "string"
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}List collection snapshots
Get list of snapshots for a collection
Parameters
collection_namestringrequiredpathName of the collection
Response
successful operation
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X GET '{protocol}://{hostname}:{port}/collections/{collection_name}/snapshots'const response = await fetch('{protocol}://{hostname}:{port}/collections/{collection_name}/snapshots', {
method: 'GET',
});
const data = await response.json();import requests
response = requests.get('{protocol}://{hostname}:{port}/collections/{collection_name}/snapshots')
data = response.json(){
"usage": null,
"time": 0.002,
"status": "ok",
"result": [
{
"name": "my-collection-3766212330831337-2024-07-22-08-31-55.snapshot",
"creation_time": "2022-08-04T10:49:10",
"size": 1000000,
"checksum": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0"
}
]
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Create collection snapshot
Create new snapshot for a collection
Parameters
collection_namestringrequiredpathName of the collection for which to create a snapshot
waitbooleanqueryIf true, wait for changes to actually happen. If false - let changes happen in background. Default is true.
Response
successful operation
operation is accepted
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X POST '{protocol}://{hostname}:{port}/collections/{collection_name}/snapshots'const response = await fetch('{protocol}://{hostname}:{port}/collections/{collection_name}/snapshots', {
method: 'POST',
});
const data = await response.json();import requests
response = requests.post('{protocol}://{hostname}:{port}/collections/{collection_name}/snapshots')
data = response.json(){
"time": 0.002,
"status": "ok",
"result": {
"name": "my-collection-3766212330831337-2024-07-22-08-31-55.snapshot",
"creation_time": "2022-08-04T10:49:10",
"size": 1000000,
"checksum": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0"
}
}{
"time": 0,
"status": "string"
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Download collection snapshot
Download specified snapshot from a collection as a file
Parameters
collection_namestringrequiredpathName of the collection
snapshot_namestringrequiredpathName of the snapshot to download
Response
Snapshot file
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X GET '{protocol}://{hostname}:{port}/collections/{collection_name}/snapshots/{snapshot_name}'const response = await fetch('{protocol}://{hostname}:{port}/collections/{collection_name}/snapshots/{snapshot_name}', {
method: 'GET',
});
const data = await response.json();import requests
response = requests.get('{protocol}://{hostname}:{port}/collections/{collection_name}/snapshots/{snapshot_name}')
data = response.json()"<binary>"{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Delete collection snapshot
Delete snapshot for a collection
Parameters
collection_namestringrequiredpathName of the collection for which to delete a snapshot
snapshot_namestringrequiredpathName of the snapshot to delete
waitbooleanqueryIf true, wait for changes to actually happen. If false - let changes happen in background. Default is true.
Response
successful operation
operation is accepted
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X DELETE '{protocol}://{hostname}:{port}/collections/{collection_name}/snapshots/{snapshot_name}'const response = await fetch('{protocol}://{hostname}:{port}/collections/{collection_name}/snapshots/{snapshot_name}', {
method: 'DELETE',
});
const data = await response.json();import requests
response = requests.delete('{protocol}://{hostname}:{port}/collections/{collection_name}/snapshots/{snapshot_name}')
data = response.json(){
"time": 0.002,
"status": "ok",
"result": true
}{
"time": 0,
"status": "string"
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}List of storage snapshots
Get list of snapshots of the whole storage
Response
successful operation
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X GET '{protocol}://{hostname}:{port}/snapshots'const response = await fetch('{protocol}://{hostname}:{port}/snapshots', {
method: 'GET',
});
const data = await response.json();import requests
response = requests.get('{protocol}://{hostname}:{port}/snapshots')
data = response.json(){
"usage": null,
"time": 0.002,
"status": "ok",
"result": [
{
"name": "my-collection-3766212330831337-2024-07-22-08-31-55.snapshot",
"creation_time": "2022-08-04T10:49:10",
"size": 1000000,
"checksum": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0"
}
]
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Create storage snapshot
Create new snapshot of the whole storage
Parameters
waitbooleanqueryIf true, wait for changes to actually happen. If false - let changes happen in background. Default is true.
Response
successful operation
operation is accepted
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X POST '{protocol}://{hostname}:{port}/snapshots'const response = await fetch('{protocol}://{hostname}:{port}/snapshots', {
method: 'POST',
});
const data = await response.json();import requests
response = requests.post('{protocol}://{hostname}:{port}/snapshots')
data = response.json(){
"time": 0.002,
"status": "ok",
"result": {
"name": "my-collection-3766212330831337-2024-07-22-08-31-55.snapshot",
"creation_time": "2022-08-04T10:49:10",
"size": 1000000,
"checksum": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0"
}
}{
"time": 0,
"status": "string"
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Download storage snapshot
Download specified snapshot of the whole storage as a file
Parameters
snapshot_namestringrequiredpathName of the snapshot to download
Response
Snapshot file
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X GET '{protocol}://{hostname}:{port}/snapshots/{snapshot_name}'const response = await fetch('{protocol}://{hostname}:{port}/snapshots/{snapshot_name}', {
method: 'GET',
});
const data = await response.json();import requests
response = requests.get('{protocol}://{hostname}:{port}/snapshots/{snapshot_name}')
data = response.json()"<binary>"{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Delete storage snapshot
Delete snapshot of the whole storage
Parameters
snapshot_namestringrequiredpathName of the full snapshot to delete
waitbooleanqueryIf true, wait for changes to actually happen. If false - let changes happen in background. Default is true.
Response
successful operation
operation is accepted
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X DELETE '{protocol}://{hostname}:{port}/snapshots/{snapshot_name}'const response = await fetch('{protocol}://{hostname}:{port}/snapshots/{snapshot_name}', {
method: 'DELETE',
});
const data = await response.json();import requests
response = requests.delete('{protocol}://{hostname}:{port}/snapshots/{snapshot_name}')
data = response.json(){
"time": 0.002,
"status": "ok",
"result": true
}{
"time": 0,
"status": "string"
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Download shard snapshot
Stream the current state of a shard as a snapshot file
Parameters
collection_namestringrequiredpathName of the collection
shard_idintegerrequiredpathId of the shard
Response
Snapshot file
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X GET '{protocol}://{hostname}:{port}/collections/{collection_name}/shards/{shard_id}/snapshot'const response = await fetch('{protocol}://{hostname}:{port}/collections/{collection_name}/shards/{shard_id}/snapshot', {
method: 'GET',
});
const data = await response.json();import requests
response = requests.get('{protocol}://{hostname}:{port}/collections/{collection_name}/shards/{shard_id}/snapshot')
data = response.json()"<binary>"{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Recover shard from an uploaded snapshot
Recover shard of a local collection from an uploaded snapshot. This will overwrite any data, stored on this node, for the collection shard.
Body
Snapshot to recover from
snapshotstring<binary>Parameters
collection_namestringrequiredpathName of the collection
shard_idintegerrequiredpathId of the shard to recover
waitbooleanqueryIf true, wait for changes to actually happen. If false - let changes happen in background. Default is true.
prioritySnapshotPriorityno_syncsnapshotreplicaqueryDefines source of truth for snapshot recovery
checksumstringqueryOptional SHA256 checksum to verify snapshot integrity before recovery.
Response
successful operation
operation is accepted
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X POST '{protocol}://{hostname}:{port}/collections/{collection_name}/shards/{shard_id}/snapshots/upload' \
-H 'Content-Type: multipart/form-data' \
-d '{
"snapshot": "<binary>"
}'const response = await fetch('{protocol}://{hostname}:{port}/collections/{collection_name}/shards/{shard_id}/snapshots/upload', {
method: 'POST',
headers: {
'Content-Type': 'multipart/form-data',
},
body: JSON.stringify({
"snapshot": "<binary>"
}),
});
const data = await response.json();import requests
payload = {
"snapshot": "<binary>"
}
response = requests.post('{protocol}://{hostname}:{port}/collections/{collection_name}/shards/{shard_id}/snapshots/upload', json=payload)
data = response.json(){
"snapshot": "<binary>"
}{
"time": 0.002,
"status": "ok",
"result": true
}{
"time": 0,
"status": "string"
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Recover from a snapshot
Recover shard of a local collection data from a snapshot. This will overwrite any data, stored in this shard, for the collection.
Body
Snapshot to recover from
locationstring | stringrequiredprioritySnapshotPriority | anynullchecksumstring | nullnullOptional SHA256 checksum to verify snapshot integrity before recovery.
api_keystring | nullnullOptional API key used when fetching the snapshot from a remote URL.
Parameters
collection_namestringrequiredpathName of the collection
shard_idintegerrequiredpathId of the shard to recover
waitbooleanqueryIf true, wait for changes to actually happen. If false - let changes happen in background. Default is true.
Response
successful operation
operation is accepted
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X PUT '{protocol}://{hostname}:{port}/collections/{collection_name}/shards/{shard_id}/snapshots/recover' \
-H 'Content-Type: application/json' \
-d '{
"location": "https://example.com",
"priority": null,
"checksum": null,
"api_key": null
}'const response = await fetch('{protocol}://{hostname}:{port}/collections/{collection_name}/shards/{shard_id}/snapshots/recover', {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
"location": "https://example.com",
"priority": null,
"checksum": null,
"api_key": null
}),
});
const data = await response.json();import requests
payload = {
"location": "https://example.com",
"priority": None,
"checksum": None,
"api_key": None
}
response = requests.put('{protocol}://{hostname}:{port}/collections/{collection_name}/shards/{shard_id}/snapshots/recover', json=payload)
data = response.json(){
"location": "https://example.com",
"priority": null,
"checksum": null,
"api_key": null
}{
"time": 0.002,
"status": "ok",
"result": true
}{
"time": 0,
"status": "string"
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}List shards snapshots for a collection
Get list of snapshots for a shard of a collection
Parameters
collection_namestringrequiredpathName of the collection
shard_idintegerrequiredpathId of the shard
Response
successful operation
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X GET '{protocol}://{hostname}:{port}/collections/{collection_name}/shards/{shard_id}/snapshots'const response = await fetch('{protocol}://{hostname}:{port}/collections/{collection_name}/shards/{shard_id}/snapshots', {
method: 'GET',
});
const data = await response.json();import requests
response = requests.get('{protocol}://{hostname}:{port}/collections/{collection_name}/shards/{shard_id}/snapshots')
data = response.json(){
"usage": null,
"time": 0.002,
"status": "ok",
"result": [
{
"name": "my-collection-3766212330831337-2024-07-22-08-31-55.snapshot",
"creation_time": "2022-08-04T10:49:10",
"size": 1000000,
"checksum": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0"
}
]
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Create shard snapshot
Create new snapshot of a shard for a collection
Parameters
collection_namestringrequiredpathName of the collection for which to create a snapshot
shard_idintegerrequiredpathId of the shard
waitbooleanqueryIf true, wait for changes to actually happen. If false - let changes happen in background. Default is true.
Response
successful operation
operation is accepted
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X POST '{protocol}://{hostname}:{port}/collections/{collection_name}/shards/{shard_id}/snapshots'const response = await fetch('{protocol}://{hostname}:{port}/collections/{collection_name}/shards/{shard_id}/snapshots', {
method: 'POST',
});
const data = await response.json();import requests
response = requests.post('{protocol}://{hostname}:{port}/collections/{collection_name}/shards/{shard_id}/snapshots')
data = response.json(){
"time": 0.002,
"status": "ok",
"result": {
"name": "my-collection-3766212330831337-2024-07-22-08-31-55.snapshot",
"creation_time": "2022-08-04T10:49:10",
"size": 1000000,
"checksum": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0"
}
}{
"time": 0,
"status": "string"
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Download collection snapshot
Download specified snapshot of a shard from a collection as a file
Parameters
collection_namestringrequiredpathName of the collection
shard_idintegerrequiredpathId of the shard
snapshot_namestringrequiredpathName of the snapshot to download
Response
Snapshot file
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X GET '{protocol}://{hostname}:{port}/collections/{collection_name}/shards/{shard_id}/snapshots/{snapshot_name}'const response = await fetch('{protocol}://{hostname}:{port}/collections/{collection_name}/shards/{shard_id}/snapshots/{snapshot_name}', {
method: 'GET',
});
const data = await response.json();import requests
response = requests.get('{protocol}://{hostname}:{port}/collections/{collection_name}/shards/{shard_id}/snapshots/{snapshot_name}')
data = response.json()"<binary>"{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Delete shard snapshot
Delete snapshot of a shard for a collection
Parameters
collection_namestringrequiredpathName of the collection for which to delete a snapshot
shard_idintegerrequiredpathId of the shard
snapshot_namestringrequiredpathName of the snapshot to delete
waitbooleanqueryIf true, wait for changes to actually happen. If false - let changes happen in background. Default is true.
Response
successful operation
operation is accepted
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X DELETE '{protocol}://{hostname}:{port}/collections/{collection_name}/shards/{shard_id}/snapshots/{snapshot_name}'const response = await fetch('{protocol}://{hostname}:{port}/collections/{collection_name}/shards/{shard_id}/snapshots/{snapshot_name}', {
method: 'DELETE',
});
const data = await response.json();import requests
response = requests.delete('{protocol}://{hostname}:{port}/collections/{collection_name}/shards/{shard_id}/snapshots/{snapshot_name}')
data = response.json(){
"time": 0.002,
"status": "ok",
"result": true
}{
"time": 0,
"status": "string"
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Service
Qdrant service utilities.
Returns information about the running Qdrant instance
Returns information about the running Qdrant instance like version and commit id
Response
Qdrant server version information
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X GET '{protocol}://{hostname}:{port}/'const response = await fetch('{protocol}://{hostname}:{port}/', {
method: 'GET',
});
const data = await response.json();import requests
response = requests.get('{protocol}://{hostname}:{port}/')
data = response.json(){
"title": "string",
"version": "string",
"commit": "string"
}Collect telemetry data
Collect telemetry data including app info, system info, collections info, cluster info, configs and statistics
Parameters
anonymizebooleanqueryIf true, anonymize result
details_levelinteger>= 0queryLevel of details in telemetry data. Minimal level is 0, maximal is infinity
per_collectionbooleanqueryIf true, include per-collection request statistics in the response
timeoutinteger>= 160queryTimeout for this request
Response
successful operation
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X GET '{protocol}://{hostname}:{port}/telemetry'const response = await fetch('{protocol}://{hostname}:{port}/telemetry', {
method: 'GET',
});
const data = await response.json();import requests
response = requests.get('{protocol}://{hostname}:{port}/telemetry')
data = response.json(){
"usage": null,
"time": 0.002,
"status": "ok",
"result": {
"id": "string",
"app": {
"name": "string",
"version": "string",
"features": {
"debug": true,
"service_debug_feature": true,
"recovery_mode": true,
"gpu": true,
"rocksdb": true,
"staging": true
},
"runtime_features": {
"all": false,
"incremental_hnsw_building": true,
"appendable_quantization": true,
"single_file_mmap_vector_storage": true,
"async_payload_storage": true,
"async_hnsw_graph": false,
"write_segment_manifest": false,
"append_only_mutations": false,
"compact_bitmask": false,
"append_only_storages": false,
"compact_logstore_tracker": false,
"transfer_raw_points": false,
"transfer_raw_payloads": false,
"persist_proxy_segments": false,
"combined_vector_storage": true,
"serverless_compatible": false
},
"low_memory_mode": "disabled",
"hnsw_global_config": {
"healing_threshold": 0.3
},
"system": {
"distribution": "string",
"distribution_version": "string",
"is_docker": true,
"container_runtime": "none",
"cores": 0,
"cpu_cores_used": 0,
"ram_size": 0,
"disk_size": 0,
"cpu_flags": "string",
"cpu_endian": "little",
"gpu_devices": [
{
"name": "string"
}
]
},
"jwt_rbac": true,
"hide_jwt_dashboard": true,
"audit": {
"dir": "string",
"rotation": "string",
"max_log_files": 0,
"trust_forwarded_headers": true,
"log_api": true,
"dir_size_bytes": 0
},
"startup": "2024-01-15T09:30:00Z"
},
"collections": {
"number_of_collections": 0,
"max_collections": 0,
"collections": [
{
"id": "string",
"init_time_ms": 0,
"config": {
"params": {
"vectors": {
"size": 1,
"distance": "Cosine",
"hnsw_config": {
"m": 0,
"ef_construct": 4,
"full_scan_threshold": 10,
"max_indexing_threads": 0,
"on_disk": true,
"memory": "cold",
"payload_m": 0,
"inline_storage": true
},
"quantization_config": {
"scalar": {
"type": "int8",
"quantile": 0.5,
"always_ram": true,
"memory": "cold"
}
},
"on_disk": true,
"memory": "cold",
"datatype": "float32",
"multivector_config": {
"comparator": "max_sim"
}
},
"shard_number": 1,
"sharding_method": "auto",
"replication_factor": 1,
"write_consistency_factor": 1,
"read_fan_out_factor": 0,
"read_fan_out_delay_ms": 0,
"on_disk_payload": true,
"payload": {
"memory": "cold"
},
"id_tracker": {
"memory": "cold"
},
"sparse_vectors": {}
},
"hnsw_config": {
"m": 0,
"ef_construct": 4,
"full_scan_threshold": 0,
"max_indexing_threads": 0,
"on_disk": true,
"memory": "cold",
"payload_m": 0,
"inline_storage": true
},
"optimizer_config": {
"deleted_threshold": 0.2,
"vacuum_min_vector_number": 1000,
"default_segment_number": 0,
"max_segment_size": null,
"memmap_threshold": null,
"indexing_threshold": null,
"flush_interval_sec": 0,
"max_optimization_threads": null,
"prevent_unoptimized": null
},
"wal_config": {
"wal_capacity_mb": 1,
"wal_segments_ahead": 0,
"wal_retain_closed": 1
},
"quantization_config": null,
"strict_mode_config": {
"enabled": true,
"max_query_limit": 0,
"max_timeout": 0,
"unindexed_filtering_retrieve": true,
"unindexed_filtering_update": true,
"search_max_hnsw_ef": 0,
"search_allow_exact": true,
"search_max_oversampling": 0,
"upsert_max_batchsize": 0,
"search_max_batchsize": 0,
"max_collection_vector_size_bytes": 0,
"read_rate_limit": 0,
"write_rate_limit": 0,
"max_collection_payload_size_bytes": 0,
"max_points_count": 0,
"filter_max_conditions": 0,
"condition_max_size": 0,
"multivector_config": {},
"sparse_config": {},
"max_payload_index_count": 0,
"max_resident_memory_percent": 0
},
"uuid": null,
"metadata": {
"city": "London",
"color": "green"
}
},
"shards": [
{
"id": 0,
"key": "region_1",
"local": {
"variant_name": "string",
"status": "green",
"total_optimized_points": 0,
"vectors_size_bytes": 0,
"payloads_size_bytes": 0,
"num_points": 0,
"num_vectors": 0,
"num_vectors_by_name": {},
"segments": [
{
"info": {
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"segment_type": "plain",
"num_vectors": 0,
"num_points": 0,
"num_deferred_points": 0,
"num_deleted_deferred_points": 0,
"num_indexed_vectors": 0,
"num_deleted_vectors": 0,
"vectors_size_bytes": 0,
"payloads_size_bytes": 0,
"ram_usage_bytes": 0,
"disk_usage_bytes": 0,
"is_appendable": true,
"index_schema": {},
"vector_data": {},
"payload_storage_io_backend": "mmap",
"deferred_internal_id": 0
},
"config": {
"vector_data": {},
"sparse_vector_data": {},
"payload_storage_type": {
"type": "mmap"
},
"id_tracker_memory": "cold"
},
"vector_index_searches": [
{
"index_name": "string",
"unfiltered_plain": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"unfiltered_hnsw": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"unfiltered_sparse": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_plain": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_small_cardinality": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_large_cardinality": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_acorn": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_exact": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_sparse": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"unfiltered_exact": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
}
}
],
"payload_field_indices": [
{
"field_name": "string",
"index_type": "string",
"points_values_count": 0,
"points_count": 0,
"histogram_bucket_size": 0
}
]
}
],
"optimizations": {
"status": "ok",
"optimizations": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"log": [
{
"name": "string",
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"segment_ids": [
0
],
"segment_uuids": [
"550e8400-e29b-41d4-a716-446655440000"
],
"status": "optimizing",
"start_at": "2024-01-15T09:30:00Z",
"end_at": "2024-01-15T09:30:00Z"
}
]
},
"async_scorer": true,
"indexed_only_excluded_vectors": {},
"update_queue": {
"length": 0,
"op_num": 0,
"deferred_points": 0
}
},
"remote": [
{
"shard_id": 0,
"peer_id": 0,
"searches": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"updates": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
}
}
],
"replicate_states": {},
"partial_snapshot": {
"ongoing_create_snapshot_requests": 0,
"is_recovering": true,
"recovery_timestamp": 0
}
}
],
"transfers": [
{
"shard_id": 0,
"to_shard_id": 0,
"from": 0,
"to": 0,
"sync": true,
"method": "stream_records",
"comment": "string"
}
],
"resharding": [
{
"stage": "migrating_points",
"direction": "up",
"shard_id": 0,
"peer_id": 0,
"shard_key": "region_1",
"uuid": "550e8400-e29b-41d4-a716-446655440000"
}
],
"shard_clean_tasks": {}
}
],
"snapshots": [
{
"id": "string",
"running_snapshots": 0,
"running_snapshot_recovery": 0,
"total_snapshot_creations": 0
}
]
},
"cluster": {
"enabled": true,
"status": {
"number_of_peers": 0,
"term": 0,
"commit": 0,
"pending_operations": 0,
"role": "Follower",
"is_voter": true,
"peer_id": 0,
"consensus_thread_status": {
"consensus_thread_status": "working",
"last_update": "2024-01-15T09:30:00Z"
}
},
"config": {
"grpc_timeout_ms": 0,
"p2p": {
"connection_pool_size": 0
},
"consensus": {
"max_message_queue_size": 0,
"tick_period_ms": 0,
"bootstrap_timeout_sec": 0
}
},
"peers": {},
"peer_metadata": {},
"metadata": {},
"resharding_enabled": true
},
"requests": {
"rest": {
"responses": {},
"per_collection_responses": {}
},
"grpc": {
"responses": {},
"per_collection_responses": {}
}
},
"memory": {
"active_bytes": 0,
"allocated_bytes": 0,
"metadata_bytes": 0,
"resident_bytes": 0,
"retained_bytes": 0
},
"hardware": {
"collection_data": {}
},
"search_pool": {
"mode": "string",
"high_cpu_threads": 0,
"high_io_threads": 0
},
"quota": {
"config": {
"enabled": false,
"max_resident_memory_percent": 1,
"max_disk_usage_percent": 1,
"release_margin_percent": 0
},
"exceeded": {
"resident_memory": true,
"disk_usage": true
}
}
}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Collect Prometheus metrics data
Collect metrics data including app info, collections info, cluster info and statistics
Parameters
anonymizebooleanqueryIf true, anonymize result
per_collectionbooleanqueryIf true, include per-collection request metrics with a collection label instead of global request metrics
timeoutinteger>= 160queryTimeout for this request
Response
Metrics data in Prometheus format
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X GET '{protocol}://{hostname}:{port}/metrics'const response = await fetch('{protocol}://{hostname}:{port}/metrics', {
method: 'GET',
});
const data = await response.json();import requests
response = requests.get('{protocol}://{hostname}:{port}/metrics')
data = response.json()# HELP app_info information about qdrant server
# TYPE app_info gauge
app_info{name="qdrant",version="0.11.1"} 1
# HELP cluster_enabled is cluster support enabled
# TYPE cluster_enabled gauge
cluster_enabled 0
# HELP collections_total number of collections
# TYPE collections_total gauge
collections_total 1
Kubernetes healthz endpoint
Liveness-style health check. Returns 200 as soon as the HTTP API is serving requests. It does not inspect collections, shards or consensus state, and is identical to /livez. Use it only to detect whether the process is up and responsive.
Response
Healthz response
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X GET '{protocol}://{hostname}:{port}/healthz'const response = await fetch('{protocol}://{hostname}:{port}/healthz', {
method: 'GET',
});
const data = await response.json();import requests
response = requests.get('{protocol}://{hostname}:{port}/healthz')
data = response.json()healthz check passedKubernetes livez endpoint
Kubernetes liveness probe. Returns 200 as soon as the HTTP API is serving requests. It does not inspect collections, shards or consensus state, and is identical to /healthz. A failure indicates the process is unresponsive and should be restarted.
Response
Healthz response
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X GET '{protocol}://{hostname}:{port}/livez'const response = await fetch('{protocol}://{hostname}:{port}/livez', {
method: 'GET',
});
const data = await response.json();import requests
response = requests.get('{protocol}://{hostname}:{port}/livez')
data = response.json()healthz check passedKubernetes readyz endpoint
Kubernetes readiness probe. Checks the instance and waits out pending data operations to see when it can start accepting traffic. In a distributed deployment it returns 200 only once the node has caught up with the cluster consensus commit and its local shards are healthy; otherwise it returns 503. In a single-node deployment it always returns 200 once the API is up. Use it to decide when to route traffic to the instance.
Response
The instance is ready to accept traffic
The instance is not ready to accept traffic yet
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X GET '{protocol}://{hostname}:{port}/readyz'const response = await fetch('{protocol}://{hostname}:{port}/readyz', {
method: 'GET',
});
const data = await response.json();import requests
response = requests.get('{protocol}://{hostname}:{port}/readyz')
data = response.json()all shards are readysome shards are not readyQuotas
Cluster-wide resource quotas.
Get global quotas
Get the cluster-wide resource quota configuration, together with the current utilization it is measured against. The configuration is the same on every peer, but the reported utilization is for the node serving this request only - memory and disk are node-local, so query each peer to see where the whole cluster stands.
Response
successful operation
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X GET '{protocol}://{hostname}:{port}/quotas'const response = await fetch('{protocol}://{hostname}:{port}/quotas', {
method: 'GET',
});
const data = await response.json();import requests
response = requests.get('{protocol}://{hostname}:{port}/quotas')
data = response.json(){
"usage": null,
"time": 0.002,
"status": "ok",
"result": {
"config": {
"enabled": false,
"max_resident_memory_percent": 1,
"max_disk_usage_percent": 1,
"release_margin_percent": 0
},
"usage": {
"resident_memory_percent": 0,
"disk_usage_percent": 0
},
"peers": {}
}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Set global quotas
Replace the cluster-wide resource quota configuration. The new configuration is propagated to every peer through consensus and persisted, so it survives restarts
Body
Quota configuration to apply
Cluster-wide limits on node resources.
An unset limit means the corresponding resource is not capped. Limits are only enforced while enabled is true.
enabledbooleanfalseWhether the limits below are enforced.
max_resident_memory_percentinteger<uint8> | null[1, 100]Reject memory-consuming updates once process resident memory reaches this percentage of total system memory (or of the cgroup limit, if one applies).
max_disk_usage_percentinteger<uint8> | null[1, 100]Reject disk-consuming updates once the filesystem hosting the storage directory is filled to this percentage of its capacity.
release_margin_percentinteger<uint8> | null[0, 100]How many percentage points below its limit a resource has to fall before this node starts accepting work again.
Without a margin, a resource resting on its limit crosses it in both directions on the noise between two readings, putting the node in and out of service each time — and restarting a shard recovery with it. Raise it where usage is volatile; 0 disables the margin and releases as soon as usage is back under the limit.
Unset leaves the built-in default in force, so a config written today does not pin a number that a later release may want to revise.
Parameters
waitbooleanfalsequeryIf true, wait until the new configuration is confirmed by consensus on this peer. If false - the request returns as soon as the change is proposed.
Response
successful operation
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X PUT '{protocol}://{hostname}:{port}/quotas' \
-H 'Content-Type: application/json' \
-d '{
"enabled": false,
"max_resident_memory_percent": 1,
"max_disk_usage_percent": 1,
"release_margin_percent": 0
}'const response = await fetch('{protocol}://{hostname}:{port}/quotas', {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
"enabled": false,
"max_resident_memory_percent": 1,
"max_disk_usage_percent": 1,
"release_margin_percent": 0
}),
});
const data = await response.json();import requests
payload = {
"enabled": False,
"max_resident_memory_percent": 1,
"max_disk_usage_percent": 1,
"release_margin_percent": 0
}
response = requests.put('{protocol}://{hostname}:{port}/quotas', json=payload)
data = response.json(){
"enabled": false,
"max_resident_memory_percent": 1,
"max_disk_usage_percent": 1,
"release_margin_percent": 0
}{
"usage": null,
"time": 0.002,
"status": "ok",
"result": true
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Beta
Beta features, do not depend on these yet.
Get issues
Get a report of performance issues and configuration suggestions
Response
Successful response
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X GET '{protocol}://{hostname}:{port}/issues'const response = await fetch('{protocol}://{hostname}:{port}/issues', {
method: 'GET',
});
const data = await response.json();import requests
response = requests.get('{protocol}://{hostname}:{port}/issues')
data = response.json(){}Clear issues
Removes all issues reported so far
Response
successful operation
error
error
Authorization
api-keyapiKey in headerAuthorization key, either read-write or read-only
bearerAuthhttp (bearer)curl -X DELETE '{protocol}://{hostname}:{port}/issues'const response = await fetch('{protocol}://{hostname}:{port}/issues', {
method: 'DELETE',
});
const data = await response.json();import requests
response = requests.delete('{protocol}://{hostname}:{port}/issues')
data = response.json(){
"usage": null,
"time": 0.002,
"status": "ok",
"result": true
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}Models
ErrorResponse
objecttimenumber<float>Time spent to process this request
statusobjectresultobject | null{
"time": 0,
"status": {
"error": "string"
},
"result": {}
}CollectionsResponse
objectcollectionsArray<CollectionDescription>required{
"collections": [
{
"name": "arxiv-title"
},
{
"name": "arxiv-abstract"
},
{
"name": "medium-title"
},
{
"name": "medium-text"
}
]
}CollectionInfo
objectCurrent statistics and configuration of the collection
statusCollectionStatusgreenyellowgreyredrequiredCurrent state of the collection. Green - all good. Yellow - optimization is running, 'Grey' - optimizations are possible but not triggered, Red - some operations failed and was not recovered
optimizer_statusstring | objectrequiredCurrent state of the collection
warningsArray<CollectionWarning>Warnings related to the collection
indexed_vectors_countinteger<uint> | null>= 0Approximate number of indexed vectors in the collection. Indexed vectors in large segments are faster to query, as it is stored in a specialized vector index.
points_countinteger<uint> | null>= 0Approximate number of points (vectors + payloads) in collection. Each point could be accessed by unique id.
segments_countinteger<uint>>= 0requiredNumber of segments in collection. Each segment has independent vector as payload indexes
configCollectionConfigrequiredInformation about the collection configuration
payload_schemaobjectrequiredTypes of stored payload
update_queueUpdateQueueInfo | anyUpdate queue info
{
"status": "green",
"optimizer_status": "ok",
"warnings": [
{
"message": "string"
}
],
"indexed_vectors_count": 0,
"points_count": 0,
"segments_count": 0,
"config": {
"params": {
"vectors": {
"size": 1,
"distance": "Cosine",
"hnsw_config": {
"m": 0,
"ef_construct": 4,
"full_scan_threshold": 10,
"max_indexing_threads": 0,
"on_disk": true,
"memory": "cold",
"payload_m": 0,
"inline_storage": true
},
"quantization_config": {
"scalar": {
"type": "int8",
"quantile": 0.5,
"always_ram": true,
"memory": "cold"
}
},
"on_disk": true,
"memory": "cold",
"datatype": "float32",
"multivector_config": {
"comparator": "max_sim"
}
},
"shard_number": 1,
"sharding_method": "auto",
"replication_factor": 1,
"write_consistency_factor": 1,
"read_fan_out_factor": 0,
"read_fan_out_delay_ms": 0,
"on_disk_payload": true,
"payload": {
"memory": "cold"
},
"id_tracker": {
"memory": "cold"
},
"sparse_vectors": {}
},
"hnsw_config": {
"m": 0,
"ef_construct": 4,
"full_scan_threshold": 0,
"max_indexing_threads": 0,
"on_disk": true,
"memory": "cold",
"payload_m": 0,
"inline_storage": true
},
"optimizer_config": {
"deleted_threshold": 0.2,
"vacuum_min_vector_number": 1000,
"default_segment_number": 0,
"max_segment_size": null,
"memmap_threshold": null,
"indexing_threshold": null,
"flush_interval_sec": 0,
"max_optimization_threads": null,
"prevent_unoptimized": null
},
"wal_config": {
"wal_capacity_mb": 1,
"wal_segments_ahead": 0,
"wal_retain_closed": 1
},
"quantization_config": null,
"strict_mode_config": {
"enabled": true,
"max_query_limit": 0,
"max_timeout": 0,
"unindexed_filtering_retrieve": true,
"unindexed_filtering_update": true,
"search_max_hnsw_ef": 0,
"search_allow_exact": true,
"search_max_oversampling": 0,
"upsert_max_batchsize": 0,
"search_max_batchsize": 0,
"max_collection_vector_size_bytes": 0,
"read_rate_limit": 0,
"write_rate_limit": 0,
"max_collection_payload_size_bytes": 0,
"max_points_count": 0,
"filter_max_conditions": 0,
"condition_max_size": 0,
"multivector_config": {},
"sparse_config": {},
"max_payload_index_count": 0,
"max_resident_memory_percent": 0
},
"metadata": {
"city": "London",
"color": "green"
}
},
"payload_schema": {},
"update_queue": {
"length": 0,
"deferred_points": 0
}
}CollectionStatus
stringCurrent state of the collection. Green - all good. Yellow - optimization is running, 'Grey' - optimizations are possible but not triggered, Red - some operations failed and was not recovered
"green"OptimizersStatus
objectCurrent state of the collection
Optimizers are reporting as expected
errorstringrequired"ok"CollectionConfig
objectInformation about the collection configuration
paramsCollectionParamsrequiredhnsw_configHnswConfigrequiredConfig of HNSW index
optimizer_configOptimizersConfigrequiredwal_configWalConfig | anyquantization_configScalarQuantization | ProductQuantization | BinaryQuantization | TurboQuantization | anynullstrict_mode_configStrictModeConfigOutput | anymetadataPayload | anyArbitrary JSON metadata for the collection This can be used to store application-specific information such as creation time, migration data, inference model info, etc.
{
"params": {
"vectors": {
"size": 1,
"distance": "Cosine",
"hnsw_config": {
"m": 0,
"ef_construct": 4,
"full_scan_threshold": 10,
"max_indexing_threads": 0,
"on_disk": true,
"memory": "cold",
"payload_m": 0,
"inline_storage": true
},
"quantization_config": {
"scalar": {
"type": "int8",
"quantile": 0.5,
"always_ram": true,
"memory": "cold"
}
},
"on_disk": true,
"memory": "cold",
"datatype": "float32",
"multivector_config": {
"comparator": "max_sim"
}
},
"shard_number": 1,
"sharding_method": "auto",
"replication_factor": 1,
"write_consistency_factor": 1,
"read_fan_out_factor": 0,
"read_fan_out_delay_ms": 0,
"on_disk_payload": true,
"payload": {
"memory": "cold"
},
"id_tracker": {
"memory": "cold"
},
"sparse_vectors": {}
},
"hnsw_config": {
"m": 0,
"ef_construct": 4,
"full_scan_threshold": 0,
"max_indexing_threads": 0,
"on_disk": true,
"memory": "cold",
"payload_m": 0,
"inline_storage": true
},
"optimizer_config": {
"deleted_threshold": 0.2,
"vacuum_min_vector_number": 1000,
"default_segment_number": 0,
"max_segment_size": null,
"memmap_threshold": null,
"indexing_threshold": null,
"flush_interval_sec": 0,
"max_optimization_threads": null,
"prevent_unoptimized": null
},
"wal_config": {
"wal_capacity_mb": 1,
"wal_segments_ahead": 0,
"wal_retain_closed": 1
},
"quantization_config": null,
"strict_mode_config": {
"enabled": true,
"max_query_limit": 0,
"max_timeout": 0,
"unindexed_filtering_retrieve": true,
"unindexed_filtering_update": true,
"search_max_hnsw_ef": 0,
"search_allow_exact": true,
"search_max_oversampling": 0,
"upsert_max_batchsize": 0,
"search_max_batchsize": 0,
"max_collection_vector_size_bytes": 0,
"read_rate_limit": 0,
"write_rate_limit": 0,
"max_collection_payload_size_bytes": 0,
"max_points_count": 0,
"filter_max_conditions": 0,
"condition_max_size": 0,
"multivector_config": {},
"sparse_config": {},
"max_payload_index_count": 0,
"max_resident_memory_percent": 0
},
"metadata": {
"city": "London",
"color": "green"
}
}CollectionParams
objectvectorsVectorParams | objectVector params separator for single and multiple vector modes Single mode:
{ "size": 128, "distance": "Cosine" }
or multiple mode:
{ "default": { "size": 128, "distance": "Cosine" } }
shard_numberinteger<uint32>>= 11Number of shards the collection has
sharding_methodShardingMethod | anySharding method Default is Auto - points are distributed across all available shards Custom - points are distributed across shards according to shard key
replication_factorinteger<uint32>>= 11Number of replicas for each shard
write_consistency_factorinteger<uint32>>= 11Defines how many replicas should apply the operation for us to consider it successful. Increasing this number will make the collection more resilient to inconsistencies, but will also make it fail if not enough replicas are available. Does not have any performance impact.
read_fan_out_factorinteger<uint32> | null>= 0Defines how many additional replicas should be processing read request at the same time. Default value is Auto, which means that fan-out will be determined automatically based on the busyness of the local replica. Having more than 0 might be useful to smooth latency spikes of individual nodes.
read_fan_out_delay_msinteger<uint64> | null>= 0Define number of milliseconds to wait before attempting to read from another replica. This setting can help to reduce latency spikes in case of occasional slow replicas. Default is 0, which means delayed fan out request is disabled.
on_disk_payloadboolean | nulltruedeprecatedDeprecated: use payload.memory instead. If true - point's payload will not be stored in memory. It will be read from the disk every time it is requested. This setting saves RAM by (slightly) increasing the response time. Note: those payload values that are involved in filtering and are indexed - remain in RAM.
Default: true
payloadPayloadStorageParams | anyConfiguration of the payload storage
id_trackerIdTrackerParams | anyConfiguration of the point id tracker
sparse_vectorsobject | nullConfiguration of the sparse vector storage
{
"vectors": {
"size": 1,
"distance": "Cosine",
"hnsw_config": {
"m": 0,
"ef_construct": 4,
"full_scan_threshold": 10,
"max_indexing_threads": 0,
"on_disk": true,
"memory": "cold",
"payload_m": 0,
"inline_storage": true
},
"quantization_config": {
"scalar": {
"type": "int8",
"quantile": 0.5,
"always_ram": true,
"memory": "cold"
}
},
"on_disk": true,
"memory": "cold",
"datatype": "float32",
"multivector_config": {
"comparator": "max_sim"
}
},
"shard_number": 1,
"sharding_method": "auto",
"replication_factor": 1,
"write_consistency_factor": 1,
"read_fan_out_factor": 0,
"read_fan_out_delay_ms": 0,
"on_disk_payload": true,
"payload": {
"memory": "cold"
},
"id_tracker": {
"memory": "cold"
},
"sparse_vectors": {}
}VectorsConfig
objectVector params separator for single and multiple vector modes Single mode:
{ "size": 128, "distance": "Cosine" }
or multiple mode:
{ "default": { "size": 128, "distance": "Cosine" } }
sizeinteger<uint64>[1, 65536]requiredSize of a vectors used
distanceDistanceCosineEuclidDotManhattanrequiredType of internal tags, build from payload Distance function types used to compare vectors
hnsw_configHnswConfigDiff | anyCustom params for HNSW index. If none - values from collection configuration are used.
quantization_configScalarQuantization | ProductQuantization | BinaryQuantization | TurboQuantization | anyCustom params for quantization. If none - values from collection configuration are used.
on_diskboolean | nulldeprecatedDeprecated: use memory instead. If true, vectors are served from disk, improving RAM usage at the cost of latency Default: false
memoryMemory | anyMemory placement of the original vector storage. Overrides the deprecated on_disk flag if both are set. pinned is not supported for dense vector storage. Default: cached (cold if on_disk is set to true).
datatypeDatatype | anyDefines which datatype should be used to represent vectors in the storage. Choosing different datatypes allows to optimize memory usage and performance vs accuracy.
- For
float32datatype - vectors are stored as single-precision floating point numbers, 4 bytes. - Forfloat16datatype - vectors are stored as half-precision floating point numbers, 2 bytes. - Foruint8datatype - vectors are stored as unsigned 8-bit integers, 1 byte. It expects vector elements to be in range[0, 255]. - Forturbo4datatype - vectors are quantized to 4 bits per element using the TurboQuant algorithm.
multivector_configMultiVectorConfig | any{
"size": 1,
"distance": "Cosine",
"hnsw_config": {
"m": 0,
"ef_construct": 4,
"full_scan_threshold": 10,
"max_indexing_threads": 0,
"on_disk": true,
"memory": "cold",
"payload_m": 0,
"inline_storage": true
},
"quantization_config": {
"scalar": {
"type": "int8",
"quantile": 0.5,
"always_ram": true,
"memory": "cold"
}
},
"on_disk": true,
"memory": "cold",
"datatype": "float32",
"multivector_config": {
"comparator": "max_sim"
}
}VectorParams
objectParams of single vector data storage
sizeinteger<uint64>[1, 65536]requiredSize of a vectors used
distanceDistanceCosineEuclidDotManhattanrequiredType of internal tags, build from payload Distance function types used to compare vectors
hnsw_configHnswConfigDiff | anyCustom params for HNSW index. If none - values from collection configuration are used.
quantization_configScalarQuantization | ProductQuantization | BinaryQuantization | TurboQuantization | anyCustom params for quantization. If none - values from collection configuration are used.
on_diskboolean | nulldeprecatedDeprecated: use memory instead. If true, vectors are served from disk, improving RAM usage at the cost of latency Default: false
memoryMemory | anyMemory placement of the original vector storage. Overrides the deprecated on_disk flag if both are set. pinned is not supported for dense vector storage. Default: cached (cold if on_disk is set to true).
datatypeDatatype | anyDefines which datatype should be used to represent vectors in the storage. Choosing different datatypes allows to optimize memory usage and performance vs accuracy.
- For
float32datatype - vectors are stored as single-precision floating point numbers, 4 bytes. - Forfloat16datatype - vectors are stored as half-precision floating point numbers, 2 bytes. - Foruint8datatype - vectors are stored as unsigned 8-bit integers, 1 byte. It expects vector elements to be in range[0, 255]. - Forturbo4datatype - vectors are quantized to 4 bits per element using the TurboQuant algorithm.
multivector_configMultiVectorConfig | any{
"size": 1,
"distance": "Cosine",
"hnsw_config": {
"m": 0,
"ef_construct": 4,
"full_scan_threshold": 10,
"max_indexing_threads": 0,
"on_disk": true,
"memory": "cold",
"payload_m": 0,
"inline_storage": true
},
"quantization_config": {
"scalar": {
"type": "int8",
"quantile": 0.5,
"always_ram": true,
"memory": "cold"
}
},
"on_disk": true,
"memory": "cold",
"datatype": "float32",
"multivector_config": {
"comparator": "max_sim"
}
}Distance
stringType of internal tags, build from payload Distance function types used to compare vectors
"Cosine"HnswConfigDiff
objectminteger<uint> | null>= 0Number of edges per node in the index graph. Larger the value - more accurate the search, more space required.
ef_constructinteger<uint> | null>= 4Number of neighbours to consider during the index building. Larger the value - more accurate the search, more time required to build the index.
full_scan_thresholdinteger<uint> | null>= 10Minimal size threshold (in KiloBytes) below which full-scan is preferred over HNSW search. This measures the total size of vectors being queried against. When the maximum estimated amount of points that a condition satisfies is smaller than full_scan_threshold_kb, the query planner will use full-scan search instead of HNSW index traversal for better performance. Note: 1Kb = 1 vector of size 256
max_indexing_threadsinteger<uint> | null>= 0Number of parallel threads used for background index building. If 0 - automatically select from 8 to 16. Best to keep between 8 and 16 to prevent likelihood of building broken/inefficient HNSW graphs. On small CPUs, less threads are used.
on_diskboolean | nulldeprecatedDeprecated: use memory instead. Store HNSW index on disk. If set to false, the index will be stored in RAM. Default: false
memoryMemory | anyMemory placement of the HNSW graph. Overrides the deprecated on_disk flag if both are set. Default: cached (cold if on_disk is set to true).
payload_minteger<uint> | null>= 0Custom M param for additional payload-aware HNSW links. If not set, default M will be used.
inline_storageboolean | nullStore copies of original and quantized vectors within the HNSW index file. Default: false. Enabling this option will trade the search speed for disk usage by reducing amount of random seeks during the search. Requires quantized vectors to be enabled. Multi-vectors are not supported.
{
"m": 0,
"ef_construct": 4,
"full_scan_threshold": 10,
"max_indexing_threads": 0,
"on_disk": true,
"memory": "cold",
"payload_m": 0,
"inline_storage": true
}Memory
stringMemory placement of a component's data.
Data is always persisted on disk regardless of this setting; it only controls how the data is held in RAM.
Options:
Cold- Data is not pre-loaded from disk to RAM. Preferred for rarely queried components or components larger than RAM size. First request might be slow, but data is cached with usage.Cached- Data is pre-loaded into disk-cache RAM on start. First request is fast, but data may be evicted if there is not enough memory and some other component's data is used more frequently.Pinned- Data is loaded in RAM and never evicted. First request is fast, but the component must fit in RAM at all times. Recommended for frequently queried small components like quantized vectors or primary indexes.
"cold"QuantizationConfig
objectscalarScalarQuantizationConfigrequiredproductProductQuantizationConfigrequiredbinaryBinaryQuantizationConfigrequiredturboTurboQuantQuantizationConfigrequired{
"scalar": {
"type": "int8",
"quantile": 0.5,
"always_ram": true,
"memory": "cold"
}
}ScalarQuantization
objectscalarScalarQuantizationConfigrequired{
"scalar": {
"type": "int8",
"quantile": 0.5,
"always_ram": true,
"memory": "cold"
}
}ScalarQuantizationConfig
objecttypeScalarTypeint8requiredquantilenumber<float> | null[0.5, 1]Quantile for quantization. Expected value range in [0.5, 1.0]. If not set - use the whole range of values
always_ramboolean | nulldeprecatedDeprecated: use memory instead. If true - quantized vectors always will be stored in RAM, ignoring the config of main storage
memoryMemory | anyMemory placement of quantized vectors. Overrides the deprecated always_ram flag if both are set. Default: follow the memory placement of the original vector storage.
{
"type": "int8",
"quantile": 0.5,
"always_ram": true,
"memory": "cold"
}ProductQuantization
objectproductProductQuantizationConfigrequired{
"product": {
"compression": "x4",
"always_ram": true,
"memory": "cold"
}
}ProductQuantizationConfig
objectcompressionCompressionRatiox4x8x16x32x64requiredalways_ramboolean | nulldeprecatedDeprecated: use memory instead.
memoryMemory | anyMemory placement of quantized vectors. Overrides the deprecated always_ram flag if both are set. Default: follow the memory placement of the original vector storage.
{
"compression": "x4",
"always_ram": true,
"memory": "cold"
}BinaryQuantization
objectbinaryBinaryQuantizationConfigrequired{
"binary": {
"always_ram": true,
"memory": "cold",
"encoding": "one_bit",
"query_encoding": "default"
}
}BinaryQuantizationConfig
objectalways_ramboolean | nulldeprecatedDeprecated: use memory instead.
memoryMemory | anyMemory placement of quantized vectors. Overrides the deprecated always_ram flag if both are set. Default: follow the memory placement of the original vector storage.
encodingBinaryQuantizationEncoding | anyquery_encodingBinaryQuantizationQueryEncoding | anyAsymmetric quantization configuration allows a query to have different quantization than stored vectors. It can increase the accuracy of search at the cost of performance.
{
"always_ram": true,
"memory": "cold",
"encoding": "one_bit",
"query_encoding": "default"
}BinaryQuantizationEncoding
string"one_bit"BinaryQuantizationQueryEncoding
string"default"TurboQuantization
objectturboTurboQuantQuantizationConfigrequired{
"turbo": {
"always_ram": true,
"memory": "cold",
"bits": "bits1"
}
}TurboQuantQuantizationConfig
objectalways_ramboolean | nulldeprecatedDeprecated: use memory instead.
memoryMemory | anyMemory placement of quantized vectors. Overrides the deprecated always_ram flag if both are set. Default: follow the memory placement of the original vector storage.
bitsTurboQuantBitSize | any{
"always_ram": true,
"memory": "cold",
"bits": "bits1"
}MultiVectorConfig
objectcomparatorMultiVectorComparatormax_simrequired{
"comparator": "max_sim"
}PayloadStorageParams
objectParams of the payload storage
memoryMemory | anyMemory placement of the payload storage. Overrides the deprecated on_disk_payload flag if both are set. pinned is not supported for payload storage. Default: cold (cached if on_disk_payload is set to false).
{
"memory": "cold"
}IdTrackerParams
objectParams of the point id tracker
memoryMemory | anyMemory placement of the point id mapping in indexed segments: cold keeps it on disk and reads it on demand, cached keeps it on disk but primes the page cache with it on load, pinned keeps it in RAM. Default: pinned.
{
"memory": "cold"
}SparseVectorParams
objectParams of single sparse vector data storage
indexSparseIndexParams | anyCustom params for index. If none - values from collection configuration are used.
modifierModifier | anyConfigures addition value modifications for sparse vectors. Default: none
{
"index": {
"full_scan_threshold": 0,
"on_disk": true,
"memory": "cold",
"datatype": "float32"
},
"modifier": "none"
}SparseIndexParams
objectConfiguration for sparse inverted index.
full_scan_thresholdinteger<uint> | null>= 0We prefer a full scan search upto (excluding) this number of vectors.
Note: this is number of vectors, not KiloBytes.
on_diskboolean | nulldeprecatedDeprecated: use memory instead. Store index on disk. If set to false, the index will be stored in RAM. Default: false
memoryMemory | anyMemory placement of the index. Overrides the deprecated on_disk flag if both are set. Default: pinned (cold if on_disk is set to true).
datatypeDatatype | anyDefines which datatype should be used for the index. Choosing different datatypes allows to optimize memory usage and performance vs accuracy.
- For
float32datatype - vectors are stored as single-precision floating point numbers, 4 bytes. - Forfloat16datatype - vectors are stored as half-precision floating point numbers, 2 bytes. - Foruint8datatype - vectors are quantized to unsigned 8-bit integers, 1 byte. Quantization to fit byte range[0, 255]happens during indexing automatically, so the actual vector data does not need to conform to this range.
{
"full_scan_threshold": 0,
"on_disk": true,
"memory": "cold",
"datatype": "float32"
}Modifier
stringIf used, include weight modification, which will be applied to sparse vectors at query time: None - no modification (default) Idf - inverse document frequency, based on statistics of the collection
"none"HnswConfig
objectConfig of HNSW index
minteger<uint>>= 0requiredNumber of edges per node in the index graph. Larger the value - more accurate the search, more space required.
ef_constructinteger<uint>>= 4requiredNumber of neighbours to consider during the index building. Larger the value - more accurate the search, more time required to build index.
full_scan_thresholdinteger<uint>>= 0requiredMinimal size threshold (in KiloBytes) below which full-scan is preferred over HNSW search. This measures the total size of vectors being queried against. When the maximum estimated amount of points that a condition satisfies is smaller than full_scan_threshold_kb, the query planner will use full-scan search instead of HNSW index traversal for better performance. Note: 1Kb = 1 vector of size 256
max_indexing_threadsinteger<uint>>= 00Number of parallel threads used for background index building. If 0 - automatically select from 8 to 16. Best to keep between 8 and 16 to prevent likelihood of slow building or broken/inefficient HNSW graphs. On small CPUs, less threads are used.
on_diskboolean | nulldeprecatedDeprecated: use memory instead. Store HNSW index on disk. If set to false, index will be stored in RAM. Default: false
memoryMemory | anyMemory placement of the HNSW graph. Overrides the deprecated on_disk flag if both are set. Default: cached (cold if on_disk is set to true).
payload_minteger<uint> | null>= 0Custom M param for hnsw graph built for payload index. If not set, default M will be used.
inline_storageboolean | nullStore copies of original and quantized vectors within the HNSW index file. Default: false. Enabling this option will trade the search speed for disk usage by reducing amount of random seeks during the search. Requires quantized vectors to be enabled. Multi-vectors are not supported.
{
"m": 0,
"ef_construct": 4,
"full_scan_threshold": 0,
"max_indexing_threads": 0,
"on_disk": true,
"memory": "cold",
"payload_m": 0,
"inline_storage": true
}OptimizersConfig
objectdeleted_thresholdnumber<double>[0, 1]0.2The minimal fraction of deleted vectors in a segment, required to perform segment optimization
vacuum_min_vector_numberinteger<uint>>= 1001000The minimal number of vectors in a segment, required to perform segment optimization
default_segment_numberinteger<uint>>= 0requiredTarget amount of segments optimizer will try to keep. Real amount of segments may vary depending on multiple parameters: - Amount of stored points - Current write RPS
It is recommended to select default number of segments as a factor of the number of search threads, so that each segment would be handled evenly by one of the threads. If default_segment_number = 0, will be automatically selected by the number of available CPUs.
max_segment_sizeinteger<uint> | null>= 1nullDo not create segments larger than this size (in kilobytes). Large segments might require disproportionately long indexation times, therefore it makes sense to limit the size of segments.
If indexing speed is more important - make this parameter lower. If search speed is more important - make this parameter higher. Note: 1Kb = 1 vector of size 256 If not set, will be automatically selected considering the number of available CPUs.
memmap_thresholdinteger<uint> | null>= 0nulldeprecatedMaximum size (in kilobytes) of vectors to store in-memory per segment. Segments larger than this threshold will be stored as read-only memmapped file.
Memmap storage is disabled by default, to enable it, set this threshold to a reasonable value.
To disable memmap storage, set this to 0. Internally it will use the largest threshold possible.
Note: 1Kb = 1 vector of size 256
indexing_thresholdinteger<uint> | null>= 0nullMaximum size (in kilobytes) of vectors allowed for plain index, exceeding this threshold will enable vector indexing
Default value is 10,000, based on experiments and observations.
To disable vector indexing, set to 0.
Note: 1kB = 1 vector of size 256.
flush_interval_secinteger<uint64>>= 0requiredMinimum interval between forced flushes.
max_optimization_threadsinteger<uint> | null>= 0nullMax number of threads (jobs) for running optimizations per shard. Note: each optimization job will also use max_indexing_threads threads by itself for index building. If null - have no limit and choose dynamically to saturate CPU. If 0 - no optimization threads, optimizations will be disabled.
prevent_unoptimizedboolean | nullnullIf enabled, the service will try to prevent the creation of large unoptimized segments. When enabled, new points written to segments larger than the indexing threshold are stored as "deferred points": they are persisted in the WAL and segments, but excluded from read/search results until the corresponding segments are optimized (e.g. indexed, quantized, or moved to mmap storage). Update requests with wait=true will only return after the deferred points become visible, which may significantly increase the perceived latency between submitting an update and its completion. Update requests with wait=false are not affected. Default is disabled.
{
"deleted_threshold": 0.2,
"vacuum_min_vector_number": 1000,
"default_segment_number": 0,
"max_segment_size": null,
"memmap_threshold": null,
"indexing_threshold": null,
"flush_interval_sec": 0,
"max_optimization_threads": null,
"prevent_unoptimized": null
}WalConfig
objectwal_capacity_mbinteger<uint>>= 1requiredSize of a single WAL segment in MB
wal_segments_aheadinteger<uint>>= 0requiredNumber of WAL segments to create ahead of actually used ones
wal_retain_closedinteger<uint>>= 11Number of closed WAL segments to keep
{
"wal_capacity_mb": 1,
"wal_segments_ahead": 0,
"wal_retain_closed": 1
}StrictModeConfigOutput
objectenabledboolean | nullWhether strict mode is enabled for a collection or not.
max_query_limitinteger<uint> | null>= 0Max allowed limit parameter for all APIs that don't have their own max limit.
max_timeoutinteger<uint> | null>= 0Max allowed timeout parameter.
unindexed_filtering_retrieveboolean | nullAllow usage of unindexed fields in retrieval based (e.g. search) filters.
unindexed_filtering_updateboolean | nullAllow usage of unindexed fields in filtered updates (e.g. delete by payload).
search_max_hnsw_efinteger<uint> | null>= 0Max HNSW value allowed in search parameters.
search_allow_exactboolean | nullWhether exact search is allowed or not.
search_max_oversamplingnumber<double> | nullMax oversampling value allowed in search.
upsert_max_batchsizeinteger<uint> | null>= 0Max batchsize when upserting
search_max_batchsizeinteger<uint> | null>= 0Max batchsize when searching
max_collection_vector_size_bytesinteger<uint> | null>= 0Max size of a collections vector storage in bytes, ignoring replicas.
read_rate_limitinteger<uint> | null>= 0Max number of read operations per minute per replica
write_rate_limitinteger<uint> | null>= 0Max number of write operations per minute per replica
max_collection_payload_size_bytesinteger<uint> | null>= 0Max size of a collections payload storage in bytes
max_points_countinteger<uint> | null>= 0Max number of points estimated in a collection
filter_max_conditionsinteger<uint> | null>= 0Max conditions a filter can have.
condition_max_sizeinteger<uint> | null>= 0Max size of a condition, eg. items in MatchAny.
multivector_configStrictModeMultivectorConfigOutput | anyMultivector configuration
sparse_configStrictModeSparseConfigOutput | anySparse vector configuration
max_payload_index_countinteger<uint> | null>= 0Max number of payload indexes in a collection
max_resident_memory_percentinteger<uint8> | null>= 0deprecatedDeprecated: use the node-wide quota config instead. Reject memory-consuming update operations when resident memory exceeds this percentage of total RAM (1-100)
{
"enabled": true,
"max_query_limit": 0,
"max_timeout": 0,
"unindexed_filtering_retrieve": true,
"unindexed_filtering_update": true,
"search_max_hnsw_ef": 0,
"search_allow_exact": true,
"search_max_oversampling": 0,
"upsert_max_batchsize": 0,
"search_max_batchsize": 0,
"max_collection_vector_size_bytes": 0,
"read_rate_limit": 0,
"write_rate_limit": 0,
"max_collection_payload_size_bytes": 0,
"max_points_count": 0,
"filter_max_conditions": 0,
"condition_max_size": 0,
"multivector_config": {},
"sparse_config": {},
"max_payload_index_count": 0,
"max_resident_memory_percent": 0
}StrictModeMultivectorOutput
objectmax_vectorsinteger<uint> | null>= 0Max number of vectors in a multivector
{
"max_vectors": 0
}StrictModeSparseOutput
objectmax_lengthinteger<uint> | null>= 0Max length of sparse vector
{
"max_length": 0
}PayloadIndexInfo
objectDisplay payload field type & index information
data_typePayloadSchemaTypekeywordintegerfloatgeotextbooldatetimeuuidrequiredAll possible names of payload types
paramsKeywordIndexParams | IntegerIndexParams | FloatIndexParams | GeoIndexParams | TextIndexParams | BoolIndexParams | DatetimeIndexParams | UuidIndexParams | anypointsinteger<uint>>= 0requiredNumber of points indexed with this index
{
"data_type": "keyword",
"params": {
"type": "keyword",
"is_tenant": true,
"on_disk": true,
"memory": "cold",
"enable_hnsw": true,
"prefix": true
},
"points": 0
}PayloadSchemaType
stringAll possible names of payload types
"keyword"PayloadSchemaParams
objectPayload type with parameters
typeKeywordIndexTypekeywordrequiredis_tenantboolean | nullIf true - used for tenant optimization. Default: false.
on_diskboolean | nulldeprecatedDeprecated: use memory instead. If true, store the index on disk. Default: false.
memoryMemory | anyMemory placement of the index. Overrides the deprecated on_disk flag if both are set. Default: pinned (cold if on_disk is set to true).
enable_hnswboolean | nullEnable HNSW graph building for this payload field. If true, builds additional HNSW links (Need payload_m > 0). Default: true.
prefixboolean | nullIf true, enable prefix matching (match: { "prefix": ... }) on this field. Default: false.
typeIntegerIndexTypeintegerrequiredlookupboolean | nullIf true - support direct lookups. Default is true.
rangeboolean | nullIf true - support ranges filters. Default is true.
is_principalboolean | nullIf true - use this key to organize storage of the collection data. This option assumes that this key will be used in majority of filtered requests. Default is false.
on_diskboolean | nulldeprecatedDeprecated: use memory instead. If true, store the index on disk. Default: false.
memoryMemory | anyMemory placement of the index. Overrides the deprecated on_disk flag if both are set. Default: pinned (cold if on_disk is set to true).
enable_hnswboolean | nullEnable HNSW graph building for this payload field. If true, builds additional HNSW links (Need payload_m > 0). Default: true.
typeFloatIndexTypefloatrequiredis_principalboolean | nullIf true - use this key to organize storage of the collection data. This option assumes that this key will be used in majority of filtered requests.
on_diskboolean | nulldeprecatedDeprecated: use memory instead. If true, store the index on disk. Default: false.
memoryMemory | anyMemory placement of the index. Overrides the deprecated on_disk flag if both are set. Default: pinned (cold if on_disk is set to true).
enable_hnswboolean | nullEnable HNSW graph building for this payload field. If true, builds additional HNSW links (Need payload_m > 0). Default: true.
typeGeoIndexTypegeorequiredon_diskboolean | nulldeprecatedDeprecated: use memory instead. If true, store the index on disk. Default: false.
memoryMemory | anyMemory placement of the index. Overrides the deprecated on_disk flag if both are set. Default: pinned (cold if on_disk is set to true).
enable_hnswboolean | nullEnable HNSW graph building for this payload field. If true, builds additional HNSW links (Need payload_m > 0). Default: true.
typeTextIndexTypetextrequiredtokenizerTokenizerTypeprefixwhitespacewordmultilingualmin_token_leninteger<uint> | null>= 0Minimum characters to be tokenized.
max_token_leninteger<uint> | null>= 0Maximum characters to be tokenized.
lowercaseboolean | nullIf true, lowercase all tokens. Default: true.
ascii_foldingboolean | nullIf true, normalize tokens by folding accented characters to ASCII (e.g., "ação" -> "acao"). Default: false.
phrase_matchingboolean | nullIf true, support phrase matching. Default: false.
stopwordsLanguage | StopwordsSet | anyIgnore this set of tokens. Can select from predefined languages and/or provide a custom set.
on_diskboolean | nulldeprecatedDeprecated: use memory instead. If true, store the index on disk. Default: false.
memoryMemory | anyMemory placement of the index. Overrides the deprecated on_disk flag if both are set. Default: pinned (cold if on_disk is set to true).
stemmerSnowballParams | DisabledStemmerParams | anyAlgorithm for stemming. Default: disabled.
enable_hnswboolean | nullEnable HNSW graph building for this payload field. If true, builds additional HNSW links (Need payload_m > 0). Default: true.
typeBoolIndexTypeboolrequiredon_diskboolean | nulldeprecatedDeprecated: use memory instead. If true, store the index on disk. Default: false.
memoryMemory | anyMemory placement of the index. Overrides the deprecated on_disk flag if both are set. Default: pinned (cold if on_disk is set to true).
enable_hnswboolean | nullEnable HNSW graph building for this payload field. If true, builds additional HNSW links (Need payload_m > 0). Default: true.
typeDatetimeIndexTypedatetimerequiredis_principalboolean | nullIf true - use this key to organize storage of the collection data. This option assumes that this key will be used in majority of filtered requests.
on_diskboolean | nulldeprecatedDeprecated: use memory instead. If true, store the index on disk. Default: false.
memoryMemory | anyMemory placement of the index. Overrides the deprecated on_disk flag if both are set. Default: pinned (cold if on_disk is set to true).
enable_hnswboolean | nullEnable HNSW graph building for this payload field. If true, builds additional HNSW links (Need payload_m > 0). Default: true.
typeUuidIndexTypeuuidrequiredis_tenantboolean | nullIf true - used for tenant optimization.
on_diskboolean | nulldeprecatedDeprecated: use memory instead. If true, store the index on disk. Default: false.
memoryMemory | anyMemory placement of the index. Overrides the deprecated on_disk flag if both are set. Default: pinned (cold if on_disk is set to true).
enable_hnswboolean | nullEnable HNSW graph building for this payload field. If true, builds additional HNSW links (Need payload_m > 0). Default: true.
{
"type": "keyword",
"is_tenant": true,
"on_disk": true,
"memory": "cold",
"enable_hnsw": true,
"prefix": true
}KeywordIndexParams
objecttypeKeywordIndexTypekeywordrequiredis_tenantboolean | nullIf true - used for tenant optimization. Default: false.
on_diskboolean | nulldeprecatedDeprecated: use memory instead. If true, store the index on disk. Default: false.
memoryMemory | anyMemory placement of the index. Overrides the deprecated on_disk flag if both are set. Default: pinned (cold if on_disk is set to true).
enable_hnswboolean | nullEnable HNSW graph building for this payload field. If true, builds additional HNSW links (Need payload_m > 0). Default: true.
prefixboolean | nullIf true, enable prefix matching (match: { "prefix": ... }) on this field. Default: false.
{
"type": "keyword",
"is_tenant": true,
"on_disk": true,
"memory": "cold",
"enable_hnsw": true,
"prefix": true
}IntegerIndexParams
objecttypeIntegerIndexTypeintegerrequiredlookupboolean | nullIf true - support direct lookups. Default is true.
rangeboolean | nullIf true - support ranges filters. Default is true.
is_principalboolean | nullIf true - use this key to organize storage of the collection data. This option assumes that this key will be used in majority of filtered requests. Default is false.
on_diskboolean | nulldeprecatedDeprecated: use memory instead. If true, store the index on disk. Default: false.
memoryMemory | anyMemory placement of the index. Overrides the deprecated on_disk flag if both are set. Default: pinned (cold if on_disk is set to true).
enable_hnswboolean | nullEnable HNSW graph building for this payload field. If true, builds additional HNSW links (Need payload_m > 0). Default: true.
{
"type": "integer",
"lookup": true,
"range": true,
"is_principal": true,
"on_disk": true,
"memory": "cold",
"enable_hnsw": true
}FloatIndexParams
objecttypeFloatIndexTypefloatrequiredis_principalboolean | nullIf true - use this key to organize storage of the collection data. This option assumes that this key will be used in majority of filtered requests.
on_diskboolean | nulldeprecatedDeprecated: use memory instead. If true, store the index on disk. Default: false.
memoryMemory | anyMemory placement of the index. Overrides the deprecated on_disk flag if both are set. Default: pinned (cold if on_disk is set to true).
enable_hnswboolean | nullEnable HNSW graph building for this payload field. If true, builds additional HNSW links (Need payload_m > 0). Default: true.
{
"type": "float",
"is_principal": true,
"on_disk": true,
"memory": "cold",
"enable_hnsw": true
}GeoIndexParams
objecttypeGeoIndexTypegeorequiredon_diskboolean | nulldeprecatedDeprecated: use memory instead. If true, store the index on disk. Default: false.
memoryMemory | anyMemory placement of the index. Overrides the deprecated on_disk flag if both are set. Default: pinned (cold if on_disk is set to true).
enable_hnswboolean | nullEnable HNSW graph building for this payload field. If true, builds additional HNSW links (Need payload_m > 0). Default: true.
{
"type": "geo",
"on_disk": true,
"memory": "cold",
"enable_hnsw": true
}TextIndexParams
objecttypeTextIndexTypetextrequiredtokenizerTokenizerTypeprefixwhitespacewordmultilingualmin_token_leninteger<uint> | null>= 0Minimum characters to be tokenized.
max_token_leninteger<uint> | null>= 0Maximum characters to be tokenized.
lowercaseboolean | nullIf true, lowercase all tokens. Default: true.
ascii_foldingboolean | nullIf true, normalize tokens by folding accented characters to ASCII (e.g., "ação" -> "acao"). Default: false.
phrase_matchingboolean | nullIf true, support phrase matching. Default: false.
stopwordsLanguage | StopwordsSet | anyIgnore this set of tokens. Can select from predefined languages and/or provide a custom set.
on_diskboolean | nulldeprecatedDeprecated: use memory instead. If true, store the index on disk. Default: false.
memoryMemory | anyMemory placement of the index. Overrides the deprecated on_disk flag if both are set. Default: pinned (cold if on_disk is set to true).
stemmerSnowballParams | DisabledStemmerParams | anyAlgorithm for stemming. Default: disabled.
enable_hnswboolean | nullEnable HNSW graph building for this payload field. If true, builds additional HNSW links (Need payload_m > 0). Default: true.
{
"type": "text",
"tokenizer": "prefix",
"min_token_len": 0,
"max_token_len": 0,
"lowercase": true,
"ascii_folding": true,
"phrase_matching": true,
"stopwords": "arabic",
"on_disk": true,
"memory": "cold",
"stemmer": {
"type": "snowball",
"language": "arabic"
},
"enable_hnsw": true
}StopwordsInterface
objectlanguagesArray<Language> | nullarabicazerbaijanibasquebengalicatalanchinesedanishdutchenglishfinnishfrenchgermangreekhebrewhinglishhungarianindonesianitalianjapanesekazakhnepalinorwegianportugueseromanianrussianslovenespanishswedishtajikturkishSet of languages to use for stopwords. Multiple pre-defined lists of stopwords can be combined.
customArray<string> | nullCustom stopwords set. Will be merged with the languages set.
"arabic"Language
string"arabic"StopwordsSet
objectlanguagesArray<Language> | nullarabicazerbaijanibasquebengalicatalanchinesedanishdutchenglishfinnishfrenchgermangreekhebrewhinglishhungarianindonesianitalianjapanesekazakhnepalinorwegianportugueseromanianrussianslovenespanishswedishtajikturkishSet of languages to use for stopwords. Multiple pre-defined lists of stopwords can be combined.
customArray<string> | nullCustom stopwords set. Will be merged with the languages set.
{
"languages": [
"arabic"
],
"custom": [
"string"
]
}StemmingAlgorithm
objectDifferent stemming algorithms with their configs.
typeSnowballsnowballrequiredlanguageSnowballLanguagearabicarmeniandanishdutchenglishfinnishfrenchgermangreekhungarianitaliannorwegianportugueseromanianrussianspanishswedishtamilturkishrequiredLanguages supported by snowball stemmer.
typeNoStemmernonerequiredTag selecting the explicit "no stemming" algorithm.
{
"type": "snowball",
"language": "arabic"
}SnowballParams
objecttypeSnowballsnowballrequiredlanguageSnowballLanguagearabicarmeniandanishdutchenglishfinnishfrenchgermangreekhungarianitaliannorwegianportugueseromanianrussianspanishswedishtamilturkishrequiredLanguages supported by snowball stemmer.
{
"type": "snowball",
"language": "arabic"
}SnowballLanguage
stringLanguages supported by snowball stemmer.
"arabic"DisabledStemmerParams
objecttypeNoStemmernonerequiredTag selecting the explicit "no stemming" algorithm.
{
"type": "none"
}BoolIndexParams
objecttypeBoolIndexTypeboolrequiredon_diskboolean | nulldeprecatedDeprecated: use memory instead. If true, store the index on disk. Default: false.
memoryMemory | anyMemory placement of the index. Overrides the deprecated on_disk flag if both are set. Default: pinned (cold if on_disk is set to true).
enable_hnswboolean | nullEnable HNSW graph building for this payload field. If true, builds additional HNSW links (Need payload_m > 0). Default: true.
{
"type": "bool",
"on_disk": true,
"memory": "cold",
"enable_hnsw": true
}DatetimeIndexParams
objecttypeDatetimeIndexTypedatetimerequiredis_principalboolean | nullIf true - use this key to organize storage of the collection data. This option assumes that this key will be used in majority of filtered requests.
on_diskboolean | nulldeprecatedDeprecated: use memory instead. If true, store the index on disk. Default: false.
memoryMemory | anyMemory placement of the index. Overrides the deprecated on_disk flag if both are set. Default: pinned (cold if on_disk is set to true).
enable_hnswboolean | nullEnable HNSW graph building for this payload field. If true, builds additional HNSW links (Need payload_m > 0). Default: true.
{
"type": "datetime",
"is_principal": true,
"on_disk": true,
"memory": "cold",
"enable_hnsw": true
}UuidIndexParams
objecttypeUuidIndexTypeuuidrequiredis_tenantboolean | nullIf true - used for tenant optimization.
on_diskboolean | nulldeprecatedDeprecated: use memory instead. If true, store the index on disk. Default: false.
memoryMemory | anyMemory placement of the index. Overrides the deprecated on_disk flag if both are set. Default: pinned (cold if on_disk is set to true).
enable_hnswboolean | nullEnable HNSW graph building for this payload field. If true, builds additional HNSW links (Need payload_m > 0). Default: true.
{
"type": "uuid",
"is_tenant": true,
"on_disk": true,
"memory": "cold",
"enable_hnsw": true
}UpdateQueueInfo
objectlengthinteger<uint>>= 0requiredNumber of elements in the queue
deferred_pointsinteger<uint> | null>= 0Number of points that are deferred (i.e hidden from search as they're not yet optimized).
{
"length": 0,
"deferred_points": 0
}PointRequest
objectshard_keystring | integer | Array<ShardKey> | ShardKeyWithFallback | anySpecify in which shards to look for the points, if not specified - look in all shards
idsArray<ExtendedPointId>requiredLook for points with ids
with_payloadboolean | Array<string> | PayloadSelectorInclude | PayloadSelectorExclude | anySelect which payload to return with the response. Default is true.
with_vectorboolean | Array<string>Options for specifying which vector to include
{
"shard_key": "region_1",
"ids": [
42
],
"with_payload": true,
"with_vector": true
}ShardKeySelector
objecttargetstring | integerrequiredfallbackstring | integerrequired"region_1"ShardKeyWithFallback
objecttargetstring | integerrequiredfallbackstring | integerrequired{
"target": "region_1",
"fallback": "region_1"
}ExtendedPointId
objectType, used for specifying point ID in user interface
42WithPayloadInterface
objectOptions for specifying which payload to include or not
If true - return all payload, If false - do not return payload
Specifies how to treat payload selector
includeArray<string>requiredOnly include this payload keys
excludeArray<string>requiredExclude this fields from returning payload
truePayloadSelector
objectSpecifies how to treat payload selector
includeArray<string>requiredOnly include this payload keys
excludeArray<string>requiredExclude this fields from returning payload
{
"include": [
"string"
]
}PayloadSelectorInclude
objectincludeArray<string>requiredOnly include this payload keys
{
"include": [
"string"
]
}PayloadSelectorExclude
objectexcludeArray<string>requiredExclude this fields from returning payload
{
"exclude": [
"string"
]
}WithVector
objectOptions for specifying which vector to include
If true - return all vector, If false - do not return vector
trueRecord
objectPoint data
idinteger | stringrequiredType, used for specifying point ID in user interface
payloadPayload | anyPayload - values assigned to the point
vectorArray<number> | Array<Array<number>> | object | anyVector of the point
shard_keystring | integer | anyShard Key
order_valueinteger | number | any{
"id": 42,
"payload": {
"city": "London",
"color": "green"
},
"vector": [
0.875,
0.140625,
0.897599995136261
],
"shard_key": "region_1",
"order_value": 42
}VectorStructOutput
objectVector data stored in Point
[
0.875,
0.140625,
0.897599995136261
]VectorOutput
objectVector Data stored in Point
indicesArray<integer>requiredIndices must be unique
valuesArray<number>requiredValues and indices must be the same length
[
0
]SparseVector
objectSparse vector structure
indicesArray<integer>requiredIndices must be unique
valuesArray<number>requiredValues and indices must be the same length
{
"indices": [
0
],
"values": [
0
]
}ScoredPoint
objectSearch result
idinteger | stringrequiredType, used for specifying point ID in user interface
versioninteger<uint64>>= 0requiredPoint version
scorenumber<float>requiredPoints vector distance to the query vector
payloadPayload | anyPayload - values assigned to the point
vectorArray<number> | Array<Array<number>> | object | anyVector of the point
shard_keystring | integer | anyShard Key
order_valueinteger | number | anyOrder-by value
{
"id": 42,
"version": 3,
"score": 0.75,
"payload": {
"city": "London",
"color": "green"
},
"vector": [
0.875,
0.140625,
0.897599995136261
],
"shard_key": "region_1",
"order_value": 42
}UpdateResult
objectoperation_idinteger<uint64> | null>= 0Sequential number of the operation
statusUpdateStatusacknowledgedcompletedwait_timeoutrequiredAcknowledged - Request is saved to WAL and will be process in a queue. Completed - Request is completed, changes are actual. WaitTimeout - Request is waiting for timeout.
{
"operation_id": 0,
"status": "acknowledged"
}UpdateStatus
stringAcknowledged - Request is saved to WAL and will be process in a queue. Completed - Request is completed, changes are actual. WaitTimeout - Request is waiting for timeout.
"acknowledged"ScrollRequest
objectScroll request - paginate over all points which matches given condition
shard_keystring | integer | Array<ShardKey> | ShardKeyWithFallback | anySpecify in which shards to look for the points, if not specified - look in all shards
offsetinteger | string | anyStart ID to read points from.
limitinteger<uint> | null>= 1Page size. Default: 10
filterFilter | anyLook only for points which satisfies this conditions. If not provided - all points.
with_payloadboolean | Array<string> | PayloadSelectorInclude | PayloadSelectorExclude | anySelect which payload to return with the response. Default is true.
with_vectorboolean | Array<string>Options for specifying which vector to include
order_bystring | OrderBy | anyOrder the records by a payload field.
{
"shard_key": "region_1",
"offset": 42,
"limit": 1,
"with_payload": true,
"with_vector": true,
"order_by": "string"
}Filter
objectshouldCondition | Array<Condition> | anyAt least one of those conditions should match
min_shouldany | anyAt least minimum amount of given conditions should match
mustCondition | Array<Condition> | anyAll conditions must match
must_notCondition | Array<Condition> | anyAll conditions must NOT match
{}Condition
objectkeystringrequiredPayload key
matchMatchValue | MatchText | MatchTextAny | MatchPhrase | MatchPrefix | MatchSubstring | MatchAny | MatchExcept | anyCheck if point has field with a given value
rangeRange | DatetimeRange | anyCheck if points value lies in a given range
geo_bounding_boxGeoBoundingBox | anyCheck if points geolocation lies in a given area
geo_radiusGeoRadius | anyCheck if geo point is within a given radius
geo_polygonGeoPolygon | anyCheck if geo point is within a given polygon
values_countValuesCount | anyCheck number of values of the field
is_emptyboolean | nullCheck that the field is empty, alternative syntax for is_empty: "field_name"
is_nullboolean | nullCheck that the field is null, alternative syntax for is_null: "field_name"
is_emptyPayloadFieldrequiredPayload field
is_nullPayloadFieldrequiredPayload field
has_idArray<ExtendedPointId>requiredhas_vectorstringrequiredsliceSlicerequiredOne of total disjoint deterministic slices of the id space.
A point belongs to the slice iff hash(id) % total == index, where hash is SipHash-2-4 with a zero key over the canonical id bytes: 8 little-endian bytes for numeric ids, the 16 RFC 4122 bytes for UUIDs. For a fixed total, slices 0..total are disjoint and together cover all points; membership is uniform regardless of the id scheme and stable across queries, segments, platforms and Qdrant versions.
Slices with different total values are correlated (same hash, no salt): e.g. slice 0 of total: 4 is a strict subset of slice 0 of total: 2. This keeps a smaller sample contained in a larger one.
{
"key": "string",
"match": {
"value": "string"
},
"range": {
"lt": 0,
"gt": 0,
"gte": 0,
"lte": 0
},
"geo_bounding_box": {
"top_left": {
"lon": 0,
"lat": 0
},
"bottom_right": {
"lon": 0,
"lat": 0
}
},
"geo_radius": {
"center": {
"lon": 0,
"lat": 0
},
"radius": 0
},
"geo_polygon": {
"exterior": {
"points": [
{
"lon": 0,
"lat": 0
}
]
},
"interiors": [
{
"points": [
{
"lon": 0,
"lat": 0
}
]
}
]
},
"values_count": {
"lt": 0,
"gt": 0,
"gte": 0,
"lte": 0
},
"is_empty": true,
"is_null": true
}FieldCondition
objectAll possible payload filtering conditions
keystringrequiredPayload key
matchMatchValue | MatchText | MatchTextAny | MatchPhrase | MatchPrefix | MatchSubstring | MatchAny | MatchExcept | anyCheck if point has field with a given value
rangeRange | DatetimeRange | anyCheck if points value lies in a given range
geo_bounding_boxGeoBoundingBox | anyCheck if points geolocation lies in a given area
geo_radiusGeoRadius | anyCheck if geo point is within a given radius
geo_polygonGeoPolygon | anyCheck if geo point is within a given polygon
values_countValuesCount | anyCheck number of values of the field
is_emptyboolean | nullCheck that the field is empty, alternative syntax for is_empty: "field_name"
is_nullboolean | nullCheck that the field is null, alternative syntax for is_null: "field_name"
{
"key": "string",
"match": {
"value": "string"
},
"range": {
"lt": 0,
"gt": 0,
"gte": 0,
"lte": 0
},
"geo_bounding_box": {
"top_left": {
"lon": 0,
"lat": 0
},
"bottom_right": {
"lon": 0,
"lat": 0
}
},
"geo_radius": {
"center": {
"lon": 0,
"lat": 0
},
"radius": 0
},
"geo_polygon": {
"exterior": {
"points": [
{
"lon": 0,
"lat": 0
}
]
},
"interiors": [
{
"points": [
{
"lon": 0,
"lat": 0
}
]
}
]
},
"values_count": {
"lt": 0,
"gt": 0,
"gte": 0,
"lte": 0
},
"is_empty": true,
"is_null": true
}Match
objectMatch filter request
valuestring | integer | booleanrequiredtextstringrequiredtext_anystringrequiredphrasestringrequiredprefixstringrequiredsubstringstringrequiredanyArray<string> | Array<integer>requiredexceptArray<string> | Array<integer>required{
"value": "string"
}MatchValue
objectExact match of the given value
valuestring | integer | booleanrequired{
"value": "string"
}MatchTextAny
objectFull-text match of at least one token of the string.
text_anystringrequired{
"text_any": "string"
}MatchPhrase
objectFull-text phrase match of the string.
phrasestringrequired{
"phrase": "string"
}MatchPrefix
objectMatch keyword values that start with the given string.
Byte-wise (hence, for valid UTF-8, character-wise) and case-sensitive, consistent with exact keyword matching. Served efficiently by a keyword index created with the prefix option.
prefixstringrequired{
"prefix": "string"
}MatchSubstring
objectMatch keyword values that contain the given string.
Byte-wise (hence, for valid UTF-8, character-wise) and case-sensitive, consistent with exact keyword and prefix matching. Served by a keyword index with the prefix option, through a scan of its key dictionary; without one, falls back to reading the payload.
substringstringrequired{
"substring": "string"
}MatchAny
objectExact match on any of the given values
anyArray<string> | Array<integer>required{
"any": [
"string"
]
}MatchExcept
objectShould have at least one value not matching the any given values
exceptArray<string> | Array<integer>required{
"except": [
"string"
]
}RangeInterface
objectltnumber<double> | nullpoint.key < range.lt
gtnumber<double> | nullpoint.key > range.gt
gtenumber<double> | nullpoint.key >= range.gte
ltenumber<double> | nullpoint.key <= range.lte
ltstring<date-time> | nullpoint.key < range.lt
gtstring<date-time> | nullpoint.key > range.gt
gtestring<date-time> | nullpoint.key >= range.gte
ltestring<date-time> | nullpoint.key <= range.lte
{
"lt": 0,
"gt": 0,
"gte": 0,
"lte": 0
}Range
objectRange filter request
ltnumber<double> | nullpoint.key < range.lt
gtnumber<double> | nullpoint.key > range.gt
gtenumber<double> | nullpoint.key >= range.gte
ltenumber<double> | nullpoint.key <= range.lte
{
"lt": 0,
"gt": 0,
"gte": 0,
"lte": 0
}DatetimeRange
objectRange filter request
ltstring<date-time> | nullpoint.key < range.lt
gtstring<date-time> | nullpoint.key > range.gt
gtestring<date-time> | nullpoint.key >= range.gte
ltestring<date-time> | nullpoint.key <= range.lte
{
"lt": "2024-01-15T09:30:00Z",
"gt": "2024-01-15T09:30:00Z",
"gte": "2024-01-15T09:30:00Z",
"lte": "2024-01-15T09:30:00Z"
}GeoBoundingBox
objectGeo filter request
Matches coordinates inside the rectangle, described by coordinates of lop-left and bottom-right edges
top_leftGeoPointrequiredGeo point payload schema
bottom_rightGeoPointrequiredGeo point payload schema
{
"top_left": {
"lon": 0,
"lat": 0
},
"bottom_right": {
"lon": 0,
"lat": 0
}
}GeoPoint
objectGeo point payload schema
lonnumber<double>requiredlatnumber<double>required{
"lon": 0,
"lat": 0
}GeoRadius
objectGeo filter request
Matches coordinates inside the circle of radius and center with coordinates center
centerGeoPointrequiredGeo point payload schema
radiusnumber<double>requiredRadius of the area in meters
{
"center": {
"lon": 0,
"lat": 0
},
"radius": 0
}GeoPolygon
objectGeo filter request
Matches coordinates inside the polygon, defined by exterior and interiors
exteriorGeoLineStringrequiredOrdered sequence of GeoPoints representing the line
interiorsArray<GeoLineString> | nullInterior lines (if present) bound holes within the surface each GeoLineString must consist of a minimum of 4 points, and the first and last points must be the same.
{
"exterior": {
"points": [
{
"lon": 0,
"lat": 0
}
]
},
"interiors": [
{
"points": [
{
"lon": 0,
"lat": 0
}
]
}
]
}GeoLineString
objectOrdered sequence of GeoPoints representing the line
pointsArray<GeoPoint>required{
"points": [
{
"lon": 0,
"lat": 0
}
]
}ValuesCount
objectValues count filter request
ltinteger<uint> | null>= 0point.key.length() < values_count.lt
gtinteger<uint> | null>= 0point.key.length() > values_count.gt
gteinteger<uint> | null>= 0point.key.length() >= values_count.gte
lteinteger<uint> | null>= 0point.key.length() <= values_count.lte
{
"lt": 0,
"gt": 0,
"gte": 0,
"lte": 0
}IsEmptyCondition
objectSelect points with empty payload for a specified field
is_emptyPayloadFieldrequiredPayload field
{
"is_empty": {
"key": "string"
}
}IsNullCondition
objectSelect points with null payload for a specified field
is_nullPayloadFieldrequiredPayload field
{
"is_null": {
"key": "string"
}
}HasIdCondition
objectID-based filtering condition
has_idArray<ExtendedPointId>required{
"has_id": [
42
]
}HasVectorCondition
objectFilter points which have specific vector assigned
has_vectorstringrequired{
"has_vector": "string"
}SliceCondition
objectSelect points that fall into one of total disjoint deterministic slices of the id space, for parallel scans and reproducible sampling.
sliceSlicerequiredOne of total disjoint deterministic slices of the id space.
A point belongs to the slice iff hash(id) % total == index, where hash is SipHash-2-4 with a zero key over the canonical id bytes: 8 little-endian bytes for numeric ids, the 16 RFC 4122 bytes for UUIDs. For a fixed total, slices 0..total are disjoint and together cover all points; membership is uniform regardless of the id scheme and stable across queries, segments, platforms and Qdrant versions.
Slices with different total values are correlated (same hash, no salt): e.g. slice 0 of total: 4 is a strict subset of slice 0 of total: 2. This keeps a smaller sample contained in a larger one.
{
"slice": {
"total": 1,
"index": 0
}
}Slice
objectOne of total disjoint deterministic slices of the id space.
A point belongs to the slice iff hash(id) % total == index, where hash is SipHash-2-4 with a zero key over the canonical id bytes: 8 little-endian bytes for numeric ids, the 16 RFC 4122 bytes for UUIDs. For a fixed total, slices 0..total are disjoint and together cover all points; membership is uniform regardless of the id scheme and stable across queries, segments, platforms and Qdrant versions.
Slices with different total values are correlated (same hash, no salt): e.g. slice 0 of total: 4 is a strict subset of slice 0 of total: 2. This keeps a smaller sample contained in a larger one.
totalinteger<uint32>>= 1requiredTotal number of disjoint slices the id space is split into
indexinteger<uint32>>= 0requiredWhich slice to select, must be in 0..total
{
"total": 1,
"index": 0
}Nested
objectSelect points with payload for a specified nested field
keystringrequiredfilterFilterrequired{
"key": "string"
}MinShould
objectconditionsArray<Condition>requiredmin_countinteger<uint>>= 1required{
"conditions": [],
"min_count": 1
}OrderByInterface
objectkeystringrequiredPayload key to order by
directionDirection | anyDirection of ordering: asc or desc. Default is ascending.
start_frominteger | number | string | anyWhich payload value to start scrolling from. Default is the lowest value for asc and the highest for desc
"string"OrderBy
objectkeystringrequiredPayload key to order by
directionDirection | anyDirection of ordering: asc or desc. Default is ascending.
start_frominteger | number | string | anyWhich payload value to start scrolling from. Default is the lowest value for asc and the highest for desc
{
"key": "string",
"direction": "asc",
"start_from": 0
}ScrollResult
objectResult of the points read request
pointsArray<Record>requiredList of retrieved points
next_page_offsetinteger | string | anyOffset which should be used to retrieve a next page result
{
"points": [
{
"id": 40,
"payload": {
"city": "London",
"color": "green"
},
"vector": [
0.875,
0.140625,
0.897599995136261
],
"shard_key": "region_1"
},
{
"id": 41,
"payload": {
"city": "Paris",
"color": "red"
},
"vector": [
0.75,
0.640625,
0.8945000171661377
],
"shard_key": "region_1"
}
],
"next_page_offset": 42
}CreateCollection
objectOperation for creating new collection and (optionally) specify index params
vectorsVectorParams | objectVector params separator for single and multiple vector modes Single mode:
{ "size": 128, "distance": "Cosine" }
or multiple mode:
{ "default": { "size": 128, "distance": "Cosine" } }
shard_numberinteger<uint32> | null>= 1nullFor auto sharding: Number of shards in collection. - Default is 1 for standalone, otherwise equal to the number of nodes - Minimum is 1
For custom sharding: Number of shards in collection per shard group. - Default is 1, meaning that each shard key will be mapped to a single shard - Minimum is 1
sharding_methodShardingMethod | anynullSharding method Default is Auto - points are distributed across all available shards Custom - points are distributed across shards according to shard key
replication_factorinteger<uint32> | null>= 1nullNumber of shards replicas. Default is 1 Minimum is 1
write_consistency_factorinteger<uint32> | null>= 1nullDefines how many replicas should apply the operation for us to consider it successful. Increasing this number will make the collection more resilient to inconsistencies, but will also make it fail if not enough replicas are available. Does not have any performance impact.
on_disk_payloadboolean | nullnulldeprecatedDeprecated: use payload.memory instead. If true - point's payload will not be stored in memory. It will be read from the disk every time it is requested. This setting saves RAM by (slightly) increasing the response time. Note: those payload values that are involved in filtering and are indexed - remain in RAM.
Default: true
payloadPayloadStorageParams | anynullConfiguration of the payload storage
id_trackerIdTrackerParams | anynullConfiguration of the point id tracker
hnsw_configHnswConfigDiff | anyCustom params for HNSW index. If none - values from service configuration file are used.
wal_configWalConfigDiff | anyCustom params for WAL. If none - values from service configuration file are used.
optimizers_configOptimizersConfigDiff | anyCustom params for Optimizers. If none - values from service configuration file are used.
quantization_configScalarQuantization | ProductQuantization | BinaryQuantization | TurboQuantization | anynullQuantization parameters. If none - quantization is disabled.
sparse_vectorsobject | nullSparse vector data config.
strict_mode_configStrictModeConfig | anyStrict-mode config.
metadataPayload | anyArbitrary JSON metadata for the collection This can be used to store application-specific information such as creation time, migration data, inference model info, etc.
{
"vectors": {
"size": 1,
"distance": "Cosine",
"hnsw_config": {
"m": 0,
"ef_construct": 4,
"full_scan_threshold": 10,
"max_indexing_threads": 0,
"on_disk": true,
"memory": "cold",
"payload_m": 0,
"inline_storage": true
},
"quantization_config": {
"scalar": {
"type": "int8",
"quantile": 0.5,
"always_ram": true,
"memory": "cold"
}
},
"on_disk": true,
"memory": "cold",
"datatype": "float32",
"multivector_config": {
"comparator": "max_sim"
}
},
"shard_number": null,
"sharding_method": null,
"replication_factor": null,
"write_consistency_factor": null,
"on_disk_payload": null,
"payload": null,
"id_tracker": null,
"hnsw_config": {
"m": 0,
"ef_construct": 4,
"full_scan_threshold": 10,
"max_indexing_threads": 0,
"on_disk": true,
"memory": "cold",
"payload_m": 0,
"inline_storage": true
},
"wal_config": {
"wal_capacity_mb": 1,
"wal_segments_ahead": 0,
"wal_retain_closed": 0
},
"optimizers_config": {
"deleted_threshold": 0,
"vacuum_min_vector_number": 100,
"default_segment_number": 0,
"max_segment_size": 1,
"memmap_threshold": 0,
"indexing_threshold": 0,
"flush_interval_sec": 0,
"max_optimization_threads": "auto",
"prevent_unoptimized": null
},
"quantization_config": null,
"sparse_vectors": {},
"strict_mode_config": {
"enabled": true,
"max_query_limit": 1,
"max_timeout": 1,
"unindexed_filtering_retrieve": true,
"unindexed_filtering_update": true,
"search_max_hnsw_ef": 0,
"search_allow_exact": true,
"search_max_oversampling": 0,
"upsert_max_batchsize": 0,
"search_max_batchsize": 0,
"max_collection_vector_size_bytes": 0,
"read_rate_limit": 1,
"write_rate_limit": 1,
"max_collection_payload_size_bytes": 0,
"max_points_count": 1,
"filter_max_conditions": 0,
"condition_max_size": 0,
"multivector_config": {},
"sparse_config": {},
"max_payload_index_count": 0,
"max_resident_memory_percent": 1
},
"metadata": {
"city": "London",
"color": "green"
}
}WalConfigDiff
objectwal_capacity_mbinteger<uint> | null>= 1Size of a single WAL segment in MB
wal_segments_aheadinteger<uint> | null>= 0Number of WAL segments to create ahead of actually used ones
wal_retain_closedinteger<uint> | null>= 0Number of closed WAL segments to retain
{
"wal_capacity_mb": 1,
"wal_segments_ahead": 0,
"wal_retain_closed": 0
}OptimizersConfigDiff
objectdeleted_thresholdnumber<double> | null[0, 1]The minimal fraction of deleted vectors in a segment, required to perform segment optimization
vacuum_min_vector_numberinteger<uint> | null>= 100The minimal number of vectors in a segment, required to perform segment optimization
default_segment_numberinteger<uint> | null>= 0Target amount of segments optimizer will try to keep. Real amount of segments may vary depending on multiple parameters: - Amount of stored points - Current write RPS
It is recommended to select default number of segments as a factor of the number of search threads, so that each segment would be handled evenly by one of the threads If default_segment_number = 0, will be automatically selected by the number of available CPUs
max_segment_sizeinteger<uint> | null>= 1Do not create segments larger than this size (in kilobytes). Large segments might require disproportionately long indexation times, therefore it makes sense to limit the size of segments.
If indexation speed have more priority for your - make this parameter lower. If search speed is more important - make this parameter higher. Note: 1Kb = 1 vector of size 256
memmap_thresholdinteger<uint> | null>= 0deprecatedMaximum size (in kilobytes) of vectors to store in-memory per segment. Segments larger than this threshold will be stored as read-only memmapped file.
Memmap storage is disabled by default, to enable it, set this threshold to a reasonable value.
To disable memmap storage, set this to 0.
Note: 1Kb = 1 vector of size 256
Deprecated since Qdrant 1.15.0
indexing_thresholdinteger<uint> | null>= 0Maximum size (in kilobytes) of vectors allowed for plain index, exceeding this threshold will enable vector indexing
Default value is 20,000, based on https://github.com/google-research/google-research/blob/master/scann/docs/algorithms.md.
To disable vector indexing, set to 0.
Note: 1kB = 1 vector of size 256.
flush_interval_secinteger<uint64> | null>= 0Minimum interval between forced flushes.
max_optimization_threadsMaxOptimizationThreadsSetting | integer | anyMax number of threads (jobs) for running optimizations per shard. Note: each optimization job will also use max_indexing_threads threads by itself for index building. If "auto" - have no limit and choose dynamically to saturate CPU. If 0 - no optimization threads, optimizations will be disabled.
prevent_unoptimizedboolean | nullnullIf enabled, the service will try to prevent the creation of large unoptimized segments. When enabled, new points written to segments larger than the indexing threshold are stored as "deferred points": they are persisted in the WAL and segments, but excluded from read/search results until the corresponding segments are optimized (e.g. indexed, quantized, or moved to mmap storage). Update requests with wait=true will only return after the deferred points become visible, which may significantly increase the perceived latency between submitting an update and its completion. Update requests with wait=false are not affected. Default is disabled.
{
"deleted_threshold": 0,
"vacuum_min_vector_number": 100,
"default_segment_number": 0,
"max_segment_size": 1,
"memmap_threshold": 0,
"indexing_threshold": 0,
"flush_interval_sec": 0,
"max_optimization_threads": "auto",
"prevent_unoptimized": null
}StrictModeConfig
objectenabledboolean | nullWhether strict mode is enabled for a collection or not.
max_query_limitinteger<uint> | null>= 1Max allowed limit parameter for all APIs that don't have their own max limit.
max_timeoutinteger<uint> | null>= 1Max allowed timeout parameter.
unindexed_filtering_retrieveboolean | nullAllow usage of unindexed fields in retrieval based (e.g. search) filters.
unindexed_filtering_updateboolean | nullAllow usage of unindexed fields in filtered updates (e.g. delete by payload).
search_max_hnsw_efinteger<uint> | null>= 0Max HNSW ef value allowed in search parameters.
search_allow_exactboolean | nullWhether exact search is allowed.
search_max_oversamplingnumber<double> | nullMax oversampling value allowed in search.
upsert_max_batchsizeinteger<uint> | null>= 0Max batchsize when upserting
search_max_batchsizeinteger<uint> | null>= 0Max batchsize when searching
max_collection_vector_size_bytesinteger<uint> | null>= 0Max size of a collections vector storage in bytes, ignoring replicas.
read_rate_limitinteger<uint> | null>= 1Max number of read operations per minute per replica
write_rate_limitinteger<uint> | null>= 1Max number of write operations per minute per replica
max_collection_payload_size_bytesinteger<uint> | null>= 0Max size of a collections payload storage in bytes
max_points_countinteger<uint> | null>= 1Max number of points estimated in a collection
filter_max_conditionsinteger<uint> | null>= 0Max conditions a filter can have.
condition_max_sizeinteger<uint> | null>= 0Max size of a condition, eg. items in MatchAny.
multivector_configStrictModeMultivectorConfig | anyMultivector strict mode configuration
sparse_configStrictModeSparseConfig | anySparse vector strict mode configuration
max_payload_index_countinteger<uint> | null>= 0Max number of payload indexes in a collection
max_resident_memory_percentinteger<uint8> | null[1, 100]deprecatedDeprecated: use the node-wide quota config (PUT /quotas) instead, which caps the same resource for every collection. Scheduled for removal in 1.21.
Reject memory-consuming update operations (e.g. upsert, set payload) when the process resident memory exceeds this percentage of total system memory (or cgroup limit). Value in [1, 100]. Memory is a node-wide resource, so this only tightens the quota for one collection; it cannot lift it. Delete operations are not affected, so callers can still free memory.
{
"enabled": true,
"max_query_limit": 1,
"max_timeout": 1,
"unindexed_filtering_retrieve": true,
"unindexed_filtering_update": true,
"search_max_hnsw_ef": 0,
"search_allow_exact": true,
"search_max_oversampling": 0,
"upsert_max_batchsize": 0,
"search_max_batchsize": 0,
"max_collection_vector_size_bytes": 0,
"read_rate_limit": 1,
"write_rate_limit": 1,
"max_collection_payload_size_bytes": 0,
"max_points_count": 1,
"filter_max_conditions": 0,
"condition_max_size": 0,
"multivector_config": {},
"sparse_config": {},
"max_payload_index_count": 0,
"max_resident_memory_percent": 1
}StrictModeMultivector
objectmax_vectorsinteger<uint> | null>= 1Max number of vectors in a multivector
{
"max_vectors": 1
}StrictModeSparse
objectmax_lengthinteger<uint> | null>= 1Max length of sparse vector
{
"max_length": 1
}UpdateCollection
objectOperation for updating parameters of the existing collection
vectorsVectorsConfigDiff | anyMap of vector data parameters to update for each named vector. To update parameters in a collection having a single unnamed vector, use an empty string as name.
optimizers_configOptimizersConfigDiff | anyCustom params for Optimizers. If none - it is left unchanged. This operation is blocking, it will only proceed once all current optimizations are complete
paramsCollectionParamsDiff | anyCollection base params. If none - it is left unchanged.
hnsw_configHnswConfigDiff | anyHNSW parameters to update for the collection index. If none - it is left unchanged.
quantization_configScalarQuantization | ProductQuantization | BinaryQuantization | TurboQuantization | Disabled | anynullQuantization parameters to update. If none - it is left unchanged.
sparse_vectorsSparseVectorsConfig | anyMap of sparse vector data parameters to update for each sparse vector.
strict_mode_configStrictModeConfig | anymetadataPayload | anyMetadata to update for the collection. If provided, this will merge with existing metadata. Individual keys can be removed by setting their value to null.
{
"vectors": {},
"optimizers_config": {
"deleted_threshold": 0,
"vacuum_min_vector_number": 100,
"default_segment_number": 0,
"max_segment_size": 1,
"memmap_threshold": 0,
"indexing_threshold": 0,
"flush_interval_sec": 0,
"max_optimization_threads": "auto",
"prevent_unoptimized": null
},
"params": {
"replication_factor": 1,
"write_consistency_factor": 1,
"read_fan_out_factor": 0,
"read_fan_out_delay_ms": 0,
"on_disk_payload": null,
"payload": {
"memory": "cold"
},
"id_tracker": {
"memory": "cold"
}
},
"hnsw_config": {
"m": 0,
"ef_construct": 4,
"full_scan_threshold": 10,
"max_indexing_threads": 0,
"on_disk": true,
"memory": "cold",
"payload_m": 0,
"inline_storage": true
},
"quantization_config": null,
"sparse_vectors": {},
"strict_mode_config": {
"enabled": true,
"max_query_limit": 1,
"max_timeout": 1,
"unindexed_filtering_retrieve": true,
"unindexed_filtering_update": true,
"search_max_hnsw_ef": 0,
"search_allow_exact": true,
"search_max_oversampling": 0,
"upsert_max_batchsize": 0,
"search_max_batchsize": 0,
"max_collection_vector_size_bytes": 0,
"read_rate_limit": 1,
"write_rate_limit": 1,
"max_collection_payload_size_bytes": 0,
"max_points_count": 1,
"filter_max_conditions": 0,
"condition_max_size": 0,
"multivector_config": {},
"sparse_config": {},
"max_payload_index_count": 0,
"max_resident_memory_percent": 1
},
"metadata": {
"city": "London",
"color": "green"
}
}VectorsConfigDiff
objectVector update params for multiple vectors
{ "vector_name": { "hnsw_config": { "m": 8 } } }
{}VectorParamsDiff
objecthnsw_configHnswConfigDiff | anyUpdate params for HNSW index. If empty object - it will be unset.
quantization_configScalarQuantization | ProductQuantization | BinaryQuantization | TurboQuantization | Disabled | anyUpdate params for quantization. If none - it is left unchanged.
on_diskboolean | nulldeprecatedDeprecated: use memory instead. If true, vectors are served from disk, improving RAM usage at the cost of latency
memoryMemory | anyMemory placement of the original vector storage. Overrides the deprecated on_disk flag if both are set. pinned is not supported for dense vector storage.
{
"hnsw_config": {
"m": 0,
"ef_construct": 4,
"full_scan_threshold": 10,
"max_indexing_threads": 0,
"on_disk": true,
"memory": "cold",
"payload_m": 0,
"inline_storage": true
},
"quantization_config": {
"scalar": {
"type": "int8",
"quantile": 0.5,
"always_ram": true,
"memory": "cold"
}
},
"on_disk": true,
"memory": "cold"
}QuantizationConfigDiff
objectscalarScalarQuantizationConfigrequiredproductProductQuantizationConfigrequiredbinaryBinaryQuantizationConfigrequiredturboTurboQuantQuantizationConfigrequired{
"scalar": {
"type": "int8",
"quantile": 0.5,
"always_ram": true,
"memory": "cold"
}
}CollectionParamsDiff
objectreplication_factorinteger<uint32> | null>= 1Number of replicas for each shard
write_consistency_factorinteger<uint32> | null>= 1Minimal number successful responses from replicas to consider operation successful
read_fan_out_factorinteger<uint32> | null>= 0Fan-out every read request to these many additional remote nodes (and return first available response)
read_fan_out_delay_msinteger<uint64> | null>= 0Delay in milliseconds before sending read requests to remote nodes
on_disk_payloadboolean | nullnulldeprecatedDeprecated: use payload.memory instead. If true - point's payload will not be stored in memory. It will be read from the disk every time it is requested. This setting saves RAM by (slightly) increasing the response time. Note: those payload values that are involved in filtering and are indexed - remain in RAM.
payloadPayloadStorageParams | anyUpdate params of the payload storage. If none - it is left unchanged.
id_trackerIdTrackerParams | anyUpdate params of the point id tracker. If none - it is left unchanged.
{
"replication_factor": 1,
"write_consistency_factor": 1,
"read_fan_out_factor": 0,
"read_fan_out_delay_ms": 0,
"on_disk_payload": null,
"payload": {
"memory": "cold"
},
"id_tracker": {
"memory": "cold"
}
}ChangeAliasesOperation
objectOperation for performing changes of collection aliases. Alias changes are atomic, meaning that no collection modifications can happen between alias operations.
actionsArray<AliasOperations>required{
"actions": [
{
"create_alias": {
"collection_name": "string",
"alias_name": "string"
}
}
]
}AliasOperations
objectGroup of all the possible operations related to collection aliases
create_aliasCreateAliasrequiredCreate alternative name for a collection. Collection will be available under both names for search, retrieve,
delete_aliasDeleteAliasrequiredDelete alias if exists
rename_aliasRenameAliasrequiredChange alias to a new one
{
"create_alias": {
"collection_name": "string",
"alias_name": "string"
}
}CreateAliasOperation
objectcreate_aliasCreateAliasrequiredCreate alternative name for a collection. Collection will be available under both names for search, retrieve,
{
"create_alias": {
"collection_name": "string",
"alias_name": "string"
}
}CreateAlias
objectCreate alternative name for a collection. Collection will be available under both names for search, retrieve,
collection_namestringrequiredalias_namestringrequired{
"collection_name": "string",
"alias_name": "string"
}DeleteAliasOperation
objectDelete alias if exists
delete_aliasDeleteAliasrequiredDelete alias if exists
{
"delete_alias": {
"alias_name": "string"
}
}RenameAliasOperation
objectChange alias to a new one
rename_aliasRenameAliasrequiredChange alias to a new one
{
"rename_alias": {
"old_alias_name": "string",
"new_alias_name": "string"
}
}RenameAlias
objectChange alias to a new one
old_alias_namestringrequirednew_alias_namestringrequired{
"old_alias_name": "string",
"new_alias_name": "string"
}CreateFieldIndex
objectfield_namestringrequiredfield_schemaPayloadSchemaType | KeywordIndexParams | IntegerIndexParams | FloatIndexParams | GeoIndexParams | TextIndexParams | BoolIndexParams | DatetimeIndexParams | UuidIndexParams | any{
"field_name": "string",
"field_schema": "keyword"
}PayloadFieldSchema
objectAll possible names of payload types
Payload type with parameters
typeKeywordIndexTypekeywordrequiredis_tenantboolean | nullIf true - used for tenant optimization. Default: false.
on_diskboolean | nulldeprecatedDeprecated: use memory instead. If true, store the index on disk. Default: false.
memoryMemory | anyMemory placement of the index. Overrides the deprecated on_disk flag if both are set. Default: pinned (cold if on_disk is set to true).
enable_hnswboolean | nullEnable HNSW graph building for this payload field. If true, builds additional HNSW links (Need payload_m > 0). Default: true.
prefixboolean | nullIf true, enable prefix matching (match: { "prefix": ... }) on this field. Default: false.
typeIntegerIndexTypeintegerrequiredlookupboolean | nullIf true - support direct lookups. Default is true.
rangeboolean | nullIf true - support ranges filters. Default is true.
is_principalboolean | nullIf true - use this key to organize storage of the collection data. This option assumes that this key will be used in majority of filtered requests. Default is false.
on_diskboolean | nulldeprecatedDeprecated: use memory instead. If true, store the index on disk. Default: false.
memoryMemory | anyMemory placement of the index. Overrides the deprecated on_disk flag if both are set. Default: pinned (cold if on_disk is set to true).
enable_hnswboolean | nullEnable HNSW graph building for this payload field. If true, builds additional HNSW links (Need payload_m > 0). Default: true.
typeFloatIndexTypefloatrequiredis_principalboolean | nullIf true - use this key to organize storage of the collection data. This option assumes that this key will be used in majority of filtered requests.
on_diskboolean | nulldeprecatedDeprecated: use memory instead. If true, store the index on disk. Default: false.
memoryMemory | anyMemory placement of the index. Overrides the deprecated on_disk flag if both are set. Default: pinned (cold if on_disk is set to true).
enable_hnswboolean | nullEnable HNSW graph building for this payload field. If true, builds additional HNSW links (Need payload_m > 0). Default: true.
typeGeoIndexTypegeorequiredon_diskboolean | nulldeprecatedDeprecated: use memory instead. If true, store the index on disk. Default: false.
memoryMemory | anyMemory placement of the index. Overrides the deprecated on_disk flag if both are set. Default: pinned (cold if on_disk is set to true).
enable_hnswboolean | nullEnable HNSW graph building for this payload field. If true, builds additional HNSW links (Need payload_m > 0). Default: true.
typeTextIndexTypetextrequiredtokenizerTokenizerTypeprefixwhitespacewordmultilingualmin_token_leninteger<uint> | null>= 0Minimum characters to be tokenized.
max_token_leninteger<uint> | null>= 0Maximum characters to be tokenized.
lowercaseboolean | nullIf true, lowercase all tokens. Default: true.
ascii_foldingboolean | nullIf true, normalize tokens by folding accented characters to ASCII (e.g., "ação" -> "acao"). Default: false.
phrase_matchingboolean | nullIf true, support phrase matching. Default: false.
stopwordsLanguage | StopwordsSet | anyIgnore this set of tokens. Can select from predefined languages and/or provide a custom set.
on_diskboolean | nulldeprecatedDeprecated: use memory instead. If true, store the index on disk. Default: false.
memoryMemory | anyMemory placement of the index. Overrides the deprecated on_disk flag if both are set. Default: pinned (cold if on_disk is set to true).
stemmerSnowballParams | DisabledStemmerParams | anyAlgorithm for stemming. Default: disabled.
enable_hnswboolean | nullEnable HNSW graph building for this payload field. If true, builds additional HNSW links (Need payload_m > 0). Default: true.
typeBoolIndexTypeboolrequiredon_diskboolean | nulldeprecatedDeprecated: use memory instead. If true, store the index on disk. Default: false.
memoryMemory | anyMemory placement of the index. Overrides the deprecated on_disk flag if both are set. Default: pinned (cold if on_disk is set to true).
enable_hnswboolean | nullEnable HNSW graph building for this payload field. If true, builds additional HNSW links (Need payload_m > 0). Default: true.
typeDatetimeIndexTypedatetimerequiredis_principalboolean | nullIf true - use this key to organize storage of the collection data. This option assumes that this key will be used in majority of filtered requests.
on_diskboolean | nulldeprecatedDeprecated: use memory instead. If true, store the index on disk. Default: false.
memoryMemory | anyMemory placement of the index. Overrides the deprecated on_disk flag if both are set. Default: pinned (cold if on_disk is set to true).
enable_hnswboolean | nullEnable HNSW graph building for this payload field. If true, builds additional HNSW links (Need payload_m > 0). Default: true.
typeUuidIndexTypeuuidrequiredis_tenantboolean | nullIf true - used for tenant optimization.
on_diskboolean | nulldeprecatedDeprecated: use memory instead. If true, store the index on disk. Default: false.
memoryMemory | anyMemory placement of the index. Overrides the deprecated on_disk flag if both are set. Default: pinned (cold if on_disk is set to true).
enable_hnswboolean | nullEnable HNSW graph building for this payload field. If true, builds additional HNSW links (Need payload_m > 0). Default: true.
"keyword"PointsSelector
objectpointsArray<ExtendedPointId>requiredshard_keystring | integer | Array<ShardKey> | ShardKeyWithFallback | any{
"points": [
42
],
"shard_key": "region_1"
}PointIdsList
objectpointsArray<ExtendedPointId>requiredshard_keystring | integer | Array<ShardKey> | ShardKeyWithFallback | any{
"points": [
42
],
"shard_key": "region_1"
}FilterSelector
objectfilterFilterrequiredshard_keystring | integer | Array<ShardKey> | ShardKeyWithFallback | any{
"shard_key": "region_1"
}PointsBatch
objectbatchBatchrequiredshard_keystring | integer | Array<ShardKey> | ShardKeyWithFallback | anyupdate_filterFilter | anyFilter to apply when updating existing points. Only points matching this filter will be updated. Points that don't match will keep their current state. New points will be inserted regardless of the filter.
update_modeUpdateMode | anyMode of the upsert operation: insert_only, upsert (default), update_only
{
"batch": {
"ids": [
42
],
"vectors": [
[
0
]
],
"payloads": [
{
"city": "London",
"color": "green"
}
]
},
"shard_key": "region_1",
"update_mode": "upsert"
}Batch
objectidsArray<ExtendedPointId>requiredvectorsArray<Array<number>> | Array<Array<Array<number>>> | object | Array<Document> | Array<Image> | Array<InferenceObject>requiredpayloadsArray<Payload | any> | null{
"ids": [
42
],
"vectors": [
[
0
]
],
"payloads": [
{
"city": "London",
"color": "green"
}
]
}BatchVectorStruct
object[
[
0
]
]Vector
objectVector Data Vectors can be described directly with values Or specified with source "objects" for inference
indicesArray<integer>requiredIndices must be unique
valuesArray<number>requiredValues and indices must be the same length
textstringrequiredText of the document. This field will be used as input for the embedding model.
modelstringrequiredName of the model used to generate the vector. List of available models depends on a provider.
optionsobject | Bm25Config | anyAdditional options for the model, will be passed to the inference service as-is. See model cards for available options.
imageanyrequiredImage data: base64 encoded image or an URL
modelstringrequiredName of the model used to generate the vector. List of available models depends on a provider.
optionsobject | nullParameters for the model Values of the parameters are model-specific
objectanyrequiredArbitrary data, used as input for the embedding model. Used if the model requires more than one input or a custom input.
modelstringrequiredName of the model used to generate the vector. List of available models depends on a provider.
optionsobject | nullParameters for the model Values of the parameters are model-specific
[
0
]Document
objectWARN: Work-in-progress, unimplemented
Text document for embedding. Requires inference infrastructure, unimplemented.
textstringrequiredText of the document. This field will be used as input for the embedding model.
modelstringrequiredName of the model used to generate the vector. List of available models depends on a provider.
optionsobject | Bm25Config | anyAdditional options for the model, will be passed to the inference service as-is. See model cards for available options.
{
"text": "This is a document text",
"model": "jinaai/jina-embeddings-v2-base-en",
"options": {}
}DocumentOptions
objectOption variants for text documents. Ether general-purpose options or BM25-specific options. BM25-specific will only take effect if the qdrant/bm25 is specified as a model.
knumber<double>1.2Controls term frequency saturation. Higher values mean term frequency has more impact. Default is 1.2
bnumber<double>0.75Controls document length normalization. Ranges from 0 (no normalization) to 1 (full normalization). Higher values mean longer documents have less impact. Default is 0.75.
avg_lennumber<double>256Expected average document length in the collection. Default is 256.
tokenizerTokenizerTypeprefixwhitespacewordmultilinguallanguagestring | nullDefines which language to use for text preprocessing. This parameter is used to construct default stopwords filter and stemmer. To disable language-specific processing, set stemmer to {"type": "none"} and configure an empty stopword set. The legacy "language": "none" hack is deprecated and may be rejected in a future release. If not specified, English is assumed.
lowercaseboolean | nullLowercase the text before tokenization. Default is true.
ascii_foldingboolean | nullIf true, normalize tokens by folding accented characters to ASCII (e.g., "ação" -> "acao"). Default is false.
stopwordsLanguage | StopwordsSet | anyConfiguration of the stopwords filter. Supports list of pre-defined languages and custom stopwords. Default: initialized for specified language or English if not specified.
stemmerSnowballParams | DisabledStemmerParams | anyConfiguration of the stemmer. Processes tokens to their root form. Default: initialized Snowball stemmer for specified language or English if not specified.
min_token_leninteger<uint> | null>= 0Minimum token length to keep. If token is shorter than this, it will be discarded. Default is None, which means no minimum length.
max_token_leninteger<uint> | null>= 0Maximum token length to keep. If token is longer than this, it will be discarded. Default is None, which means no maximum length.
{}Bm25Config
objectConfiguration of the local bm25 models.
knumber<double>1.2Controls term frequency saturation. Higher values mean term frequency has more impact. Default is 1.2
bnumber<double>0.75Controls document length normalization. Ranges from 0 (no normalization) to 1 (full normalization). Higher values mean longer documents have less impact. Default is 0.75.
avg_lennumber<double>256Expected average document length in the collection. Default is 256.
tokenizerTokenizerTypeprefixwhitespacewordmultilinguallanguagestring | nullDefines which language to use for text preprocessing. This parameter is used to construct default stopwords filter and stemmer. To disable language-specific processing, set stemmer to {"type": "none"} and configure an empty stopword set. The legacy "language": "none" hack is deprecated and may be rejected in a future release. If not specified, English is assumed.
lowercaseboolean | nullLowercase the text before tokenization. Default is true.
ascii_foldingboolean | nullIf true, normalize tokens by folding accented characters to ASCII (e.g., "ação" -> "acao"). Default is false.
stopwordsLanguage | StopwordsSet | anyConfiguration of the stopwords filter. Supports list of pre-defined languages and custom stopwords. Default: initialized for specified language or English if not specified.
stemmerSnowballParams | DisabledStemmerParams | anyConfiguration of the stemmer. Processes tokens to their root form. Default: initialized Snowball stemmer for specified language or English if not specified.
min_token_leninteger<uint> | null>= 0Minimum token length to keep. If token is shorter than this, it will be discarded. Default is None, which means no minimum length.
max_token_leninteger<uint> | null>= 0Maximum token length to keep. If token is longer than this, it will be discarded. Default is None, which means no maximum length.
{
"k": 1.2,
"b": 0.75,
"avg_len": 256,
"tokenizer": "prefix",
"language": "string",
"lowercase": true,
"ascii_folding": true,
"stopwords": "arabic",
"stemmer": {
"type": "snowball",
"language": "arabic"
},
"min_token_len": 0,
"max_token_len": 0
}Image
objectWARN: Work-in-progress, unimplemented
Image object for embedding. Requires inference infrastructure, unimplemented.
imageanyrequiredImage data: base64 encoded image or an URL
modelstringrequiredName of the model used to generate the vector. List of available models depends on a provider.
optionsobject | nullParameters for the model Values of the parameters are model-specific
{
"image": "https://example.com/image.jpg",
"model": "Qdrant/clip-ViT-B-32-vision",
"options": {}
}InferenceObject
objectWARN: Work-in-progress, unimplemented
Custom object for embedding. Requires inference infrastructure, unimplemented.
objectanyrequiredArbitrary data, used as input for the embedding model. Used if the model requires more than one input or a custom input.
modelstringrequiredName of the model used to generate the vector. List of available models depends on a provider.
optionsobject | nullParameters for the model Values of the parameters are model-specific
{
"model": "jinaai/jina-embeddings-v2-base-en",
"options": {}
}UpdateMode
stringDefines the mode of the upsert operation
upsert- default mode, insert new points, update existing points *insert_only- only insert new points, do not update existing points *update_only- only update existing points, do not insert new points
"upsert"PointsList
objectpointsArray<PointStruct>requiredshard_keystring | integer | Array<ShardKey> | ShardKeyWithFallback | anyupdate_filterFilter | anyFilter to apply when updating existing points. Only points matching this filter will be updated. Points that don't match will keep their current state. New points will be inserted regardless of the filter.
update_modeUpdateMode | anyMode of the upsert operation: insert_only, upsert (default), update_only
{
"points": [
{
"id": 42,
"vector": [
0.875,
0.140625,
0.897599995136261
],
"payload": {
"city": "London",
"color": "green"
}
}
],
"shard_key": "region_1",
"update_mode": "upsert"
}PointStruct
objectidinteger | stringrequiredType, used for specifying point ID in user interface
vectorArray<number> | Array<Array<number>> | object | Document | Image | InferenceObjectrequiredFull vector data per point separator with single and multiple vector modes
payloadPayload | anyPayload values (optional)
{
"id": 42,
"vector": [
0.875,
0.140625,
0.897599995136261
],
"payload": {
"city": "London",
"color": "green"
}
}VectorStruct
objectFull vector data per point separator with single and multiple vector modes
textstringrequiredText of the document. This field will be used as input for the embedding model.
modelstringrequiredName of the model used to generate the vector. List of available models depends on a provider.
optionsobject | Bm25Config | anyAdditional options for the model, will be passed to the inference service as-is. See model cards for available options.
imageanyrequiredImage data: base64 encoded image or an URL
modelstringrequiredName of the model used to generate the vector. List of available models depends on a provider.
optionsobject | nullParameters for the model Values of the parameters are model-specific
objectanyrequiredArbitrary data, used as input for the embedding model. Used if the model requires more than one input or a custom input.
modelstringrequiredName of the model used to generate the vector. List of available models depends on a provider.
optionsobject | nullParameters for the model Values of the parameters are model-specific
[
0.875,
0.140625,
0.897599995136261
]SetPayload
objectThis data structure is used in API interface and applied across multiple shards
payloadPayloadrequiredpointsArray<ExtendedPointId> | nullAssigns payload to each point in this list
filterFilter | anyAssigns payload to each point that satisfy this filter condition
shard_keystring | integer | Array<ShardKey> | ShardKeyWithFallback | anykeystring | nullAssigns payload to each point that satisfy this path of property
{
"payload": {
"city": "London",
"color": "green"
},
"points": [
42
],
"shard_key": "region_1",
"key": "string"
}DeletePayload
objectThis data structure is used in API interface and applied across multiple shards
keysArray<string>requiredList of payload keys to remove from payload
pointsArray<ExtendedPointId> | nullDeletes values from each point in this list
filterFilter | anyDeletes values from points that satisfy this filter condition
shard_keystring | integer | Array<ShardKey> | ShardKeyWithFallback | any{
"keys": [
"string"
],
"points": [
42
],
"shard_key": "region_1"
}ClusterStatus
objectInformation about current cluster status and structure
statusstringdisabledrequiredstatusstringenabledrequiredpeer_idinteger<uint64>>= 0requiredID of this peer
peersobjectrequiredPeers composition of the cluster with main information
raft_infoRaftInforequiredSummary information about the current raft state
consensus_thread_statusobject | object | objectrequiredInformation about current consensus thread status
message_send_failuresobjectrequiredConsequent failures of message send operations in consensus by peer address. On the first success to send to that peer - entry is removed from this hashmap.
{
"status": "disabled"
}RaftInfo
objectSummary information about the current raft state
terminteger<uint64>>= 0requiredRaft divides time into terms of arbitrary length, each beginning with an election. If a candidate wins the election, it remains the leader for the rest of the term. The term number increases monotonically. Each server stores the current term number which is also exchanged in every communication.
commitinteger<uint64>>= 0requiredThe index of the latest committed (finalized) operation that this peer is aware of.
pending_operationsinteger<uint>>= 0requiredNumber of consensus operations pending to be applied on this peer
leaderinteger<uint64> | null>= 0Leader of the current term
roleStateRole | anyRole of this peer in the current term
is_voterbooleanrequiredIs this peer a voter or a learner
{
"term": 0,
"commit": 0,
"pending_operations": 0,
"leader": 0,
"role": "Follower",
"is_voter": true
}StateRole
stringRole of the peer in the consensus
"Follower"ConsensusThreadStatus
objectInformation about current consensus thread status
consensus_thread_statusstringworkingrequiredlast_updatestring<date-time>requiredconsensus_thread_statusstringstoppedrequiredconsensus_thread_statusstringstopped_with_errrequirederrstringrequired{
"consensus_thread_status": "working",
"last_update": "2024-01-15T09:30:00Z"
}MessageSendErrors
objectMessage send failures for a particular peer
countinteger<uint>>= 0requiredlatest_errorstring | nulllatest_error_timestampstring<date-time> | nullTimestamp of the latest error
{
"count": 0,
"latest_error": "string",
"latest_error_timestamp": "2024-01-15T09:30:00Z"
}SnapshotDescription
objectnamestringrequiredcreation_timestring<partial-date-time> | nullsizeinteger<uint64>>= 0requiredchecksumstring | null{
"name": "my-collection-3766212330831337-2024-07-22-08-31-55.snapshot",
"creation_time": "2022-08-04T10:49:10",
"size": 1000000,
"checksum": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0"
}CountRequest
objectCount Request Counts the number of points which satisfy the given filter. If filter is not provided, the count of all points in the collection will be returned.
shard_keystring | integer | Array<ShardKey> | ShardKeyWithFallback | anySpecify in which shards to look for the points, if not specified - look in all shards
filterFilter | anyLook only for points which satisfies this conditions
exactbooleantrueIf true, count exact number of points. If false, count approximate number of points faster. Approximate count might be unreliable during the indexing process. Default: true
{
"shard_key": "region_1",
"exact": true
}CountResult
objectcountinteger<uint>>= 0requiredNumber of points which satisfy the conditions
{
"count": 0
}CollectionClusterInfo
objectCurrent clustering distribution for the collection
peer_idinteger<uint64>>= 0requiredID of this peer
shard_countinteger<uint>>= 0requiredTotal number of shards
local_shardsArray<LocalShardInfo>requiredLocal shards
remote_shardsArray<RemoteShardInfo>requiredRemote shards
shard_transfersArray<ShardTransferInfo>requiredShard transfers
resharding_operationsArray<ReshardingInfo> | nullResharding operations
{
"peer_id": 0,
"shard_count": 0,
"local_shards": [
{
"shard_id": 0,
"shard_key": "region_1",
"points_count": 0,
"state": "Active"
}
],
"remote_shards": [
{
"shard_id": 0,
"shard_key": "region_1",
"peer_id": 0,
"state": "Active"
}
],
"shard_transfers": [
{
"shard_id": 0,
"to_shard_id": 0,
"from": 0,
"to": 0,
"sync": true,
"method": "stream_records",
"comment": "string"
}
],
"resharding_operations": [
{
"direction": "up",
"shard_id": 0,
"peer_id": 0,
"shard_key": "region_1"
}
]
}LocalShardInfo
objectshard_idinteger<uint32>>= 0requiredLocal shard id
shard_keystring | integer | anyUser-defined sharding key
points_countinteger<uint>>= 0requiredNumber of points in the shard
stateReplicaStateActiveDeadPartialInitializingListenerPartialSnapshotRecoveryReshardingReshardingScaleDownActiveReadManualRecoveryrequiredState of the single shard within a replica set.
{
"shard_id": 0,
"shard_key": "region_1",
"points_count": 0,
"state": "Active"
}ReplicaState
stringState of the single shard within a replica set.
"Active"RemoteShardInfo
objectshard_idinteger<uint32>>= 0requiredRemote shard id
shard_keystring | integer | anyUser-defined sharding key
peer_idinteger<uint64>>= 0requiredRemote peer id
stateReplicaStateActiveDeadPartialInitializingListenerPartialSnapshotRecoveryReshardingReshardingScaleDownActiveReadManualRecoveryrequiredState of the single shard within a replica set.
{
"shard_id": 0,
"shard_key": "region_1",
"peer_id": 0,
"state": "Active"
}ShardTransferInfo
objectshard_idinteger<uint32>>= 0requiredto_shard_idinteger<uint32> | null>= 0Target shard ID if different than source shard ID
Used exclusively with ReshardingStreamRecords transfer method.
frominteger<uint64>>= 0requiredSource peer id
tointeger<uint64>>= 0requiredDestination peer id
syncbooleanrequiredIf true transfer is a synchronization of a replicas If false transfer is a moving of a shard from one peer to another
methodShardTransferMethod | anycommentstring | nullA human-readable report of the transfer progress. Available only on the source peer, and on the target peer during snapshot recovery.
{
"shard_id": 0,
"to_shard_id": 0,
"from": 0,
"to": 0,
"sync": true,
"method": "stream_records",
"comment": "string"
}ShardTransferMethod
stringMethods for transferring a shard from one node to another.
stream_records- Stream all shard records in batches until the whole shard is transferred.snapshot- Snapshot the shard, transfer and restore it on the receiver.wal_delta- Attempt to transfer shard difference by WAL delta.resharding_stream_records- Shard transfer for resharding: stream all records in batches until all points are transferred.
"stream_records"ReshardingInfo
objectdirectionReshardingDirectionupdownrequiredResharding direction, scale up or down in number of shards
up- Scale up, add a new sharddown- Scale down, remove a shard
shard_idinteger<uint32>>= 0requiredpeer_idinteger<uint64>>= 0requiredshard_keystring | integer | any{
"direction": "up",
"shard_id": 0,
"peer_id": 0,
"shard_key": "region_1"
}ReshardingDirection
stringResharding direction, scale up or down in number of shards
up- Scale up, add a new sharddown- Scale down, remove a shard
"up"TelemetryData
objectidstringrequiredappAppBuildTelemetry | anycollectionsCollectionsTelemetryrequiredclusterClusterTelemetry | anyrequestsRequestsTelemetry | anymemoryMemoryTelemetry | anyhardwareHardwareTelemetry | anysearch_poolSearchThreadPoolTelemetry | anyquotaQuotaTelemetry | anyResource quota this node is enforcing, and whether it is currently over it. The config is whatever this node last persisted, so a peer that missed a consensus update reports what it is actually applying rather than what the cluster agreed on. Absent for a token without global access, which GET /quotas requires as well.
{
"id": "string",
"app": {
"name": "string",
"version": "string",
"features": {
"debug": true,
"service_debug_feature": true,
"recovery_mode": true,
"gpu": true,
"rocksdb": true,
"staging": true
},
"runtime_features": {
"all": false,
"incremental_hnsw_building": true,
"appendable_quantization": true,
"single_file_mmap_vector_storage": true,
"async_payload_storage": true,
"async_hnsw_graph": false,
"write_segment_manifest": false,
"append_only_mutations": false,
"compact_bitmask": false,
"append_only_storages": false,
"compact_logstore_tracker": false,
"transfer_raw_points": false,
"transfer_raw_payloads": false,
"persist_proxy_segments": false,
"combined_vector_storage": true,
"serverless_compatible": false
},
"low_memory_mode": "disabled",
"hnsw_global_config": {
"healing_threshold": 0.3
},
"system": {
"distribution": "string",
"distribution_version": "string",
"is_docker": true,
"container_runtime": "none",
"cores": 0,
"cpu_cores_used": 0,
"ram_size": 0,
"disk_size": 0,
"cpu_flags": "string",
"cpu_endian": "little",
"gpu_devices": [
{
"name": "string"
}
]
},
"jwt_rbac": true,
"hide_jwt_dashboard": true,
"audit": {
"dir": "string",
"rotation": "string",
"max_log_files": 0,
"trust_forwarded_headers": true,
"log_api": true,
"dir_size_bytes": 0
},
"startup": "2024-01-15T09:30:00Z"
},
"collections": {
"number_of_collections": 0,
"max_collections": 0,
"collections": [
{
"id": "string",
"init_time_ms": 0,
"config": {
"params": {
"vectors": {
"size": 1,
"distance": "Cosine",
"hnsw_config": {
"m": 0,
"ef_construct": 4,
"full_scan_threshold": 10,
"max_indexing_threads": 0,
"on_disk": true,
"memory": "cold",
"payload_m": 0,
"inline_storage": true
},
"quantization_config": {
"scalar": {
"type": "int8",
"quantile": 0.5,
"always_ram": true,
"memory": "cold"
}
},
"on_disk": true,
"memory": "cold",
"datatype": "float32",
"multivector_config": {
"comparator": "max_sim"
}
},
"shard_number": 1,
"sharding_method": "auto",
"replication_factor": 1,
"write_consistency_factor": 1,
"read_fan_out_factor": 0,
"read_fan_out_delay_ms": 0,
"on_disk_payload": true,
"payload": {
"memory": "cold"
},
"id_tracker": {
"memory": "cold"
},
"sparse_vectors": {}
},
"hnsw_config": {
"m": 0,
"ef_construct": 4,
"full_scan_threshold": 0,
"max_indexing_threads": 0,
"on_disk": true,
"memory": "cold",
"payload_m": 0,
"inline_storage": true
},
"optimizer_config": {
"deleted_threshold": 0.2,
"vacuum_min_vector_number": 1000,
"default_segment_number": 0,
"max_segment_size": null,
"memmap_threshold": null,
"indexing_threshold": null,
"flush_interval_sec": 0,
"max_optimization_threads": null,
"prevent_unoptimized": null
},
"wal_config": {
"wal_capacity_mb": 1,
"wal_segments_ahead": 0,
"wal_retain_closed": 1
},
"quantization_config": null,
"strict_mode_config": {
"enabled": true,
"max_query_limit": 0,
"max_timeout": 0,
"unindexed_filtering_retrieve": true,
"unindexed_filtering_update": true,
"search_max_hnsw_ef": 0,
"search_allow_exact": true,
"search_max_oversampling": 0,
"upsert_max_batchsize": 0,
"search_max_batchsize": 0,
"max_collection_vector_size_bytes": 0,
"read_rate_limit": 0,
"write_rate_limit": 0,
"max_collection_payload_size_bytes": 0,
"max_points_count": 0,
"filter_max_conditions": 0,
"condition_max_size": 0,
"multivector_config": {},
"sparse_config": {},
"max_payload_index_count": 0,
"max_resident_memory_percent": 0
},
"uuid": null,
"metadata": {
"city": "London",
"color": "green"
}
},
"shards": [
{
"id": 0,
"key": "region_1",
"local": {
"variant_name": "string",
"status": "green",
"total_optimized_points": 0,
"vectors_size_bytes": 0,
"payloads_size_bytes": 0,
"num_points": 0,
"num_vectors": 0,
"num_vectors_by_name": {},
"segments": [
{
"info": {
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"segment_type": "plain",
"num_vectors": 0,
"num_points": 0,
"num_deferred_points": 0,
"num_deleted_deferred_points": 0,
"num_indexed_vectors": 0,
"num_deleted_vectors": 0,
"vectors_size_bytes": 0,
"payloads_size_bytes": 0,
"ram_usage_bytes": 0,
"disk_usage_bytes": 0,
"is_appendable": true,
"index_schema": {},
"vector_data": {},
"payload_storage_io_backend": "mmap",
"deferred_internal_id": 0
},
"config": {
"vector_data": {},
"sparse_vector_data": {},
"payload_storage_type": {
"type": "mmap"
},
"id_tracker_memory": "cold"
},
"vector_index_searches": [
{
"index_name": "string",
"unfiltered_plain": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"unfiltered_hnsw": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"unfiltered_sparse": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_plain": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_small_cardinality": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_large_cardinality": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_acorn": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_exact": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_sparse": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"unfiltered_exact": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
}
}
],
"payload_field_indices": [
{
"field_name": "string",
"index_type": "string",
"points_values_count": 0,
"points_count": 0,
"histogram_bucket_size": 0
}
]
}
],
"optimizations": {
"status": "ok",
"optimizations": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"log": [
{
"name": "string",
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"segment_ids": [
0
],
"segment_uuids": [
"550e8400-e29b-41d4-a716-446655440000"
],
"status": "optimizing",
"start_at": "2024-01-15T09:30:00Z",
"end_at": "2024-01-15T09:30:00Z"
}
]
},
"async_scorer": true,
"indexed_only_excluded_vectors": {},
"update_queue": {
"length": 0,
"op_num": 0,
"deferred_points": 0
}
},
"remote": [
{
"shard_id": 0,
"peer_id": 0,
"searches": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"updates": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
}
}
],
"replicate_states": {},
"partial_snapshot": {
"ongoing_create_snapshot_requests": 0,
"is_recovering": true,
"recovery_timestamp": 0
}
}
],
"transfers": [
{
"shard_id": 0,
"to_shard_id": 0,
"from": 0,
"to": 0,
"sync": true,
"method": "stream_records",
"comment": "string"
}
],
"resharding": [
{
"stage": "migrating_points",
"direction": "up",
"shard_id": 0,
"peer_id": 0,
"shard_key": "region_1",
"uuid": "550e8400-e29b-41d4-a716-446655440000"
}
],
"shard_clean_tasks": {}
}
],
"snapshots": [
{
"id": "string",
"running_snapshots": 0,
"running_snapshot_recovery": 0,
"total_snapshot_creations": 0
}
]
},
"cluster": {
"enabled": true,
"status": {
"number_of_peers": 0,
"term": 0,
"commit": 0,
"pending_operations": 0,
"role": "Follower",
"is_voter": true,
"peer_id": 0,
"consensus_thread_status": {
"consensus_thread_status": "working",
"last_update": "2024-01-15T09:30:00Z"
}
},
"config": {
"grpc_timeout_ms": 0,
"p2p": {
"connection_pool_size": 0
},
"consensus": {
"max_message_queue_size": 0,
"tick_period_ms": 0,
"bootstrap_timeout_sec": 0
}
},
"peers": {},
"peer_metadata": {},
"metadata": {},
"resharding_enabled": true
},
"requests": {
"rest": {
"responses": {},
"per_collection_responses": {}
},
"grpc": {
"responses": {},
"per_collection_responses": {}
}
},
"memory": {
"active_bytes": 0,
"allocated_bytes": 0,
"metadata_bytes": 0,
"resident_bytes": 0,
"retained_bytes": 0
},
"hardware": {
"collection_data": {}
},
"search_pool": {
"mode": "string",
"high_cpu_threads": 0,
"high_io_threads": 0
},
"quota": {
"config": {
"enabled": false,
"max_resident_memory_percent": 1,
"max_disk_usage_percent": 1,
"release_margin_percent": 0
},
"exceeded": {
"resident_memory": true,
"disk_usage": true
}
}
}AppBuildTelemetry
objectnamestringrequiredversionstringrequiredfeaturesAppFeaturesTelemetry | anyruntime_featuresFeatureFlags | anylow_memory_modestring | string | string | anyhnsw_global_configHnswGlobalConfig | anysystemRunningEnvironmentTelemetry | anyjwt_rbacboolean | nullhide_jwt_dashboardboolean | nullauditAuditTelemetry | anystartupstring<date-time>required{
"name": "string",
"version": "string",
"features": {
"debug": true,
"service_debug_feature": true,
"recovery_mode": true,
"gpu": true,
"rocksdb": true,
"staging": true
},
"runtime_features": {
"all": false,
"incremental_hnsw_building": true,
"appendable_quantization": true,
"single_file_mmap_vector_storage": true,
"async_payload_storage": true,
"async_hnsw_graph": false,
"write_segment_manifest": false,
"append_only_mutations": false,
"compact_bitmask": false,
"append_only_storages": false,
"compact_logstore_tracker": false,
"transfer_raw_points": false,
"transfer_raw_payloads": false,
"persist_proxy_segments": false,
"combined_vector_storage": true,
"serverless_compatible": false
},
"low_memory_mode": "disabled",
"hnsw_global_config": {
"healing_threshold": 0.3
},
"system": {
"distribution": "string",
"distribution_version": "string",
"is_docker": true,
"container_runtime": "none",
"cores": 0,
"cpu_cores_used": 0,
"ram_size": 0,
"disk_size": 0,
"cpu_flags": "string",
"cpu_endian": "little",
"gpu_devices": [
{
"name": "string"
}
]
},
"jwt_rbac": true,
"hide_jwt_dashboard": true,
"audit": {
"dir": "string",
"rotation": "string",
"max_log_files": 0,
"trust_forwarded_headers": true,
"log_api": true,
"dir_size_bytes": 0
},
"startup": "2024-01-15T09:30:00Z"
}AppFeaturesTelemetry
objectdebugbooleanrequiredservice_debug_featurebooleanrequiredrecovery_modebooleanrequiredgpubooleanrequiredrocksdbbooleanrequiredstagingbooleanrequired{
"debug": true,
"service_debug_feature": true,
"recovery_mode": true,
"gpu": true,
"rocksdb": true,
"staging": true
}FeatureFlags
objectallbooleanfalseMagic feature flag that enables all features.
Note that this will only be applied to all flags when passed into [init_feature_flags].
incremental_hnsw_buildingbooleantrueUse incremental HNSW building.
Enabled by default in Qdrant 1.14.1.
appendable_quantizationbooleantrueUse appendable quantization in appendable plain segments.
Enabled by default in Qdrant 1.16.0.
single_file_mmap_vector_storagebooleantrueUse single-file mmap in-ram vector storage (InRamMmap)
Enabled by default in Qdrant 1.18.3+
async_payload_storagebooleantrueAllow the io_uring-based payload storage implementation. When disabled, io_uring payload storage is never used. When enabled, payload storage backend is decided based on storage.performance.io_uring option and payload storage type.
async_hnsw_graphbooleanfalseAllow the batched io_uring-based HNSW graph search. When disabled, the HNSW graph is never opened on io_uring. When enabled, the graph backend is decided based on storage.performance.io_uring option and links placement.
write_segment_manifestbooleanfalseWrite a segment manifest (segments_manifest.json, next to the segments/ directory) listing the shard's segments and their state, so out-of-process readers can discover segments without scanning the filesystem.
append_only_mutationsbooleanfalseBuild new segments in append-only mode: in-place point mutations become clone-and-tombstone appends instead. Intended for testing the append-only storage path.
compact_bitmaskbooleanfalsePersist write-once bitmasks in the compact StoredBitmask format instead of raw dense bitslices. Only gates writing: both formats are always readable.
append_only_storagesbooleanfalseCreate Blobstore-backed storages (payload storage, appendable field indexes, sparse vectors) in the append-only Logstore mode. Gates creation only: an existing storage keeps its persisted mode, and both modes are always readable.
Implies [Self::append_only_mutations], enforced by [init_feature_flags].
compact_logstore_trackerbooleanfalseIn non-appendable segments built by the optimizer, store the tracker of an append-only payload storage in the compacted format: read into RAM whole on open instead of one lookup per value. Only has an effect together with [Self::append_only_storages]. Gates creation only: both formats are always readable.
transfer_raw_pointsbooleanfalseTransfer points as storage-native bytes (raw points), for every collection rather than only those whose vector storage would lose precision in a decode-encode round-trip (TurboQuant).
Read on the sending side only, where the transfer batch is prepared: nodes accept raw points regardless.
transfer_raw_payloadsbooleanfalseSend the payload of a raw point as the byte blob it is stored as, so the sending node does not parse it and neither node builds a protobuf value tree for it. The receiving node still parses the blob, once, when the operation is applied. Only has an effect on points transferred raw, see [Self::transfer_raw_points].
Read on the sending side only: nodes accept raw payloads regardless.
persist_proxy_segmentsbooleanfalsePersist proxy segment changes on disk. Prevents pinning the WAL while proxy segments are open. Replays the persisted changes on startup to guarantee data consistency. Required for serverless deployments where storage and compute is separated.
combined_vector_storagebooleantrueWhen hnsw_config.inline_storage enabled, use the GraphInline vector storage (aka inline-storage without standalone vector storage) for new segments.
Existing GraphInline segments are always readable, regardless of this flag.
serverless_compatiblebooleanfalseServerless-compatible deployment mode. Implies [Self::write_segment_manifest], [Self::append_only_mutations], [Self::compact_bitmask], [Self::append_only_storages], [Self::compact_logstore_tracker] and [Self::persist_proxy_segments].
Note that this will only be applied when passed into [init_feature_flags].
{
"all": false,
"incremental_hnsw_building": true,
"appendable_quantization": true,
"single_file_mmap_vector_storage": true,
"async_payload_storage": true,
"async_hnsw_graph": false,
"write_segment_manifest": false,
"append_only_mutations": false,
"compact_bitmask": false,
"append_only_storages": false,
"compact_logstore_tracker": false,
"transfer_raw_points": false,
"transfer_raw_payloads": false,
"persist_proxy_segments": false,
"combined_vector_storage": true,
"serverless_compatible": false
}LowMemoryMode
objectControls how segments are loaded on startup to reduce memory pressure.
Configured via storage.low_memory_mode in the configuration file.
This setting only affects loading — it never modifies the persisted configuration of any segment. The same data directory will behave differently depending on how this mode is set at startup, which makes it safe to toggle for recovery from out-of-memory crash loops.
No special handling. Every component loads as persisted.
Load RAM-friendly components as their on-disk variants where possible:
- Quantization is loaded as if
always_ram = false. * Payload field indexes are loaded as ifon_disk = true. * Payload storage is loaded as the mmap variant (lazy populate).
Same as [LowMemoryMode::NoResident], plus mmap page population is skipped on load (for original vectors, HNSW graph and payload storage).
"disabled"HnswGlobalConfig
objecthealing_thresholdnumber<double>[0, 1]0.3Enable HNSW healing if the ratio of missing points is no more than this value. To disable healing completely, set this value to 0.0.
{
"healing_threshold": 0.3
}RunningEnvironmentTelemetry
objectdistributionstring | nulldistribution_versionstring | nullis_dockerbooleanrequiredcontainer_runtimeContainerRuntimenonedockerkubernetesotherrequiredContainer runtime Qdrant is running under (none if bare metal).
coresinteger<uint> | null>= 0cpu_cores_usednumber<float> | nullAverage number of CPU cores used by this process over roughly the last two seconds. None on unsupported platforms, before two samples are collected, or on transient failures reading process CPU time.
ram_sizeinteger<uint> | null>= 0Effective total memory for this process in KiB (cgroup limit or host RAM).
disk_sizeinteger<uint> | null>= 0Size in KiB of the filesystem hosting Qdrant's /storage path (if not available, fallback to host disk size)
cpu_flagsstringrequiredcpu_endianCpuEndian | anygpu_devicesArray<GpuDeviceTelemetry> | null{
"distribution": "string",
"distribution_version": "string",
"is_docker": true,
"container_runtime": "none",
"cores": 0,
"cpu_cores_used": 0,
"ram_size": 0,
"disk_size": 0,
"cpu_flags": "string",
"cpu_endian": "little",
"gpu_devices": [
{
"name": "string"
}
]
}ContainerRuntime
stringContainer runtime Qdrant is running under (none if bare metal).
"none"AuditTelemetry
objectdirstringrequiredrotationstringrequiredmax_log_filesinteger<uint>>= 0requiredtrust_forwarded_headersbooleanrequiredlog_apibooleanrequireddir_size_bytesinteger<uint> | null>= 0{
"dir": "string",
"rotation": "string",
"max_log_files": 0,
"trust_forwarded_headers": true,
"log_api": true,
"dir_size_bytes": 0
}CollectionsTelemetry
objectnumber_of_collectionsinteger<uint>>= 0requiredmax_collectionsinteger<uint> | null>= 0collectionsArray<CollectionTelemetryEnum> | nullsnapshotsArray<CollectionSnapshotTelemetry> | null{
"number_of_collections": 0,
"max_collections": 0,
"collections": [
{
"id": "string",
"init_time_ms": 0,
"config": {
"params": {
"vectors": {
"size": 1,
"distance": "Cosine",
"hnsw_config": {
"m": 0,
"ef_construct": 4,
"full_scan_threshold": 10,
"max_indexing_threads": 0,
"on_disk": true,
"memory": "cold",
"payload_m": 0,
"inline_storage": true
},
"quantization_config": {
"scalar": {
"type": "int8",
"quantile": 0.5,
"always_ram": true,
"memory": "cold"
}
},
"on_disk": true,
"memory": "cold",
"datatype": "float32",
"multivector_config": {
"comparator": "max_sim"
}
},
"shard_number": 1,
"sharding_method": "auto",
"replication_factor": 1,
"write_consistency_factor": 1,
"read_fan_out_factor": 0,
"read_fan_out_delay_ms": 0,
"on_disk_payload": true,
"payload": {
"memory": "cold"
},
"id_tracker": {
"memory": "cold"
},
"sparse_vectors": {}
},
"hnsw_config": {
"m": 0,
"ef_construct": 4,
"full_scan_threshold": 0,
"max_indexing_threads": 0,
"on_disk": true,
"memory": "cold",
"payload_m": 0,
"inline_storage": true
},
"optimizer_config": {
"deleted_threshold": 0.2,
"vacuum_min_vector_number": 1000,
"default_segment_number": 0,
"max_segment_size": null,
"memmap_threshold": null,
"indexing_threshold": null,
"flush_interval_sec": 0,
"max_optimization_threads": null,
"prevent_unoptimized": null
},
"wal_config": {
"wal_capacity_mb": 1,
"wal_segments_ahead": 0,
"wal_retain_closed": 1
},
"quantization_config": null,
"strict_mode_config": {
"enabled": true,
"max_query_limit": 0,
"max_timeout": 0,
"unindexed_filtering_retrieve": true,
"unindexed_filtering_update": true,
"search_max_hnsw_ef": 0,
"search_allow_exact": true,
"search_max_oversampling": 0,
"upsert_max_batchsize": 0,
"search_max_batchsize": 0,
"max_collection_vector_size_bytes": 0,
"read_rate_limit": 0,
"write_rate_limit": 0,
"max_collection_payload_size_bytes": 0,
"max_points_count": 0,
"filter_max_conditions": 0,
"condition_max_size": 0,
"multivector_config": {},
"sparse_config": {},
"max_payload_index_count": 0,
"max_resident_memory_percent": 0
},
"uuid": null,
"metadata": {
"city": "London",
"color": "green"
}
},
"shards": [
{
"id": 0,
"key": "region_1",
"local": {
"variant_name": "string",
"status": "green",
"total_optimized_points": 0,
"vectors_size_bytes": 0,
"payloads_size_bytes": 0,
"num_points": 0,
"num_vectors": 0,
"num_vectors_by_name": {},
"segments": [
{
"info": {
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"segment_type": "plain",
"num_vectors": 0,
"num_points": 0,
"num_deferred_points": 0,
"num_deleted_deferred_points": 0,
"num_indexed_vectors": 0,
"num_deleted_vectors": 0,
"vectors_size_bytes": 0,
"payloads_size_bytes": 0,
"ram_usage_bytes": 0,
"disk_usage_bytes": 0,
"is_appendable": true,
"index_schema": {},
"vector_data": {},
"payload_storage_io_backend": "mmap",
"deferred_internal_id": 0
},
"config": {
"vector_data": {},
"sparse_vector_data": {},
"payload_storage_type": {
"type": "mmap"
},
"id_tracker_memory": "cold"
},
"vector_index_searches": [
{
"index_name": "string",
"unfiltered_plain": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"unfiltered_hnsw": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"unfiltered_sparse": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_plain": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_small_cardinality": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_large_cardinality": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_acorn": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_exact": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_sparse": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"unfiltered_exact": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
}
}
],
"payload_field_indices": [
{
"field_name": "string",
"index_type": "string",
"points_values_count": 0,
"points_count": 0,
"histogram_bucket_size": 0
}
]
}
],
"optimizations": {
"status": "ok",
"optimizations": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"log": [
{
"name": "string",
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"segment_ids": [
0
],
"segment_uuids": [
"550e8400-e29b-41d4-a716-446655440000"
],
"status": "optimizing",
"start_at": "2024-01-15T09:30:00Z",
"end_at": "2024-01-15T09:30:00Z"
}
]
},
"async_scorer": true,
"indexed_only_excluded_vectors": {},
"update_queue": {
"length": 0,
"op_num": 0,
"deferred_points": 0
}
},
"remote": [
{
"shard_id": 0,
"peer_id": 0,
"searches": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"updates": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
}
}
],
"replicate_states": {},
"partial_snapshot": {
"ongoing_create_snapshot_requests": 0,
"is_recovering": true,
"recovery_timestamp": 0
}
}
],
"transfers": [
{
"shard_id": 0,
"to_shard_id": 0,
"from": 0,
"to": 0,
"sync": true,
"method": "stream_records",
"comment": "string"
}
],
"resharding": [
{
"stage": "migrating_points",
"direction": "up",
"shard_id": 0,
"peer_id": 0,
"shard_key": "region_1",
"uuid": "550e8400-e29b-41d4-a716-446655440000"
}
],
"shard_clean_tasks": {}
}
],
"snapshots": [
{
"id": "string",
"running_snapshots": 0,
"running_snapshot_recovery": 0,
"total_snapshot_creations": 0
}
]
}CollectionTelemetryEnum
objectidstringrequiredinit_time_msinteger<uint64> | null>= 0configCollectionConfigTelemetry | anyshardsArray<ReplicaSetTelemetry> | nulltransfersArray<ShardTransferInfo> | nullreshardingArray<ReshardingTelemetry> | nullshard_clean_tasksobject | nullvectorsinteger<uint>>= 0requiredoptimizers_statusstring | objectrequiredCurrent state of the collection
paramsCollectionParamsrequired{
"id": "string",
"init_time_ms": 0,
"config": {
"params": {
"vectors": {
"size": 1,
"distance": "Cosine",
"hnsw_config": {
"m": 0,
"ef_construct": 4,
"full_scan_threshold": 10,
"max_indexing_threads": 0,
"on_disk": true,
"memory": "cold",
"payload_m": 0,
"inline_storage": true
},
"quantization_config": {
"scalar": {
"type": "int8",
"quantile": 0.5,
"always_ram": true,
"memory": "cold"
}
},
"on_disk": true,
"memory": "cold",
"datatype": "float32",
"multivector_config": {
"comparator": "max_sim"
}
},
"shard_number": 1,
"sharding_method": "auto",
"replication_factor": 1,
"write_consistency_factor": 1,
"read_fan_out_factor": 0,
"read_fan_out_delay_ms": 0,
"on_disk_payload": true,
"payload": {
"memory": "cold"
},
"id_tracker": {
"memory": "cold"
},
"sparse_vectors": {}
},
"hnsw_config": {
"m": 0,
"ef_construct": 4,
"full_scan_threshold": 0,
"max_indexing_threads": 0,
"on_disk": true,
"memory": "cold",
"payload_m": 0,
"inline_storage": true
},
"optimizer_config": {
"deleted_threshold": 0.2,
"vacuum_min_vector_number": 1000,
"default_segment_number": 0,
"max_segment_size": null,
"memmap_threshold": null,
"indexing_threshold": null,
"flush_interval_sec": 0,
"max_optimization_threads": null,
"prevent_unoptimized": null
},
"wal_config": {
"wal_capacity_mb": 1,
"wal_segments_ahead": 0,
"wal_retain_closed": 1
},
"quantization_config": null,
"strict_mode_config": {
"enabled": true,
"max_query_limit": 0,
"max_timeout": 0,
"unindexed_filtering_retrieve": true,
"unindexed_filtering_update": true,
"search_max_hnsw_ef": 0,
"search_allow_exact": true,
"search_max_oversampling": 0,
"upsert_max_batchsize": 0,
"search_max_batchsize": 0,
"max_collection_vector_size_bytes": 0,
"read_rate_limit": 0,
"write_rate_limit": 0,
"max_collection_payload_size_bytes": 0,
"max_points_count": 0,
"filter_max_conditions": 0,
"condition_max_size": 0,
"multivector_config": {},
"sparse_config": {},
"max_payload_index_count": 0,
"max_resident_memory_percent": 0
},
"uuid": null,
"metadata": {
"city": "London",
"color": "green"
}
},
"shards": [
{
"id": 0,
"key": "region_1",
"local": {
"variant_name": "string",
"status": "green",
"total_optimized_points": 0,
"vectors_size_bytes": 0,
"payloads_size_bytes": 0,
"num_points": 0,
"num_vectors": 0,
"num_vectors_by_name": {},
"segments": [
{
"info": {
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"segment_type": "plain",
"num_vectors": 0,
"num_points": 0,
"num_deferred_points": 0,
"num_deleted_deferred_points": 0,
"num_indexed_vectors": 0,
"num_deleted_vectors": 0,
"vectors_size_bytes": 0,
"payloads_size_bytes": 0,
"ram_usage_bytes": 0,
"disk_usage_bytes": 0,
"is_appendable": true,
"index_schema": {},
"vector_data": {},
"payload_storage_io_backend": "mmap",
"deferred_internal_id": 0
},
"config": {
"vector_data": {},
"sparse_vector_data": {},
"payload_storage_type": {
"type": "mmap"
},
"id_tracker_memory": "cold"
},
"vector_index_searches": [
{
"index_name": "string",
"unfiltered_plain": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"unfiltered_hnsw": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"unfiltered_sparse": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_plain": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_small_cardinality": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_large_cardinality": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_acorn": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_exact": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_sparse": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"unfiltered_exact": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
}
}
],
"payload_field_indices": [
{
"field_name": "string",
"index_type": "string",
"points_values_count": 0,
"points_count": 0,
"histogram_bucket_size": 0
}
]
}
],
"optimizations": {
"status": "ok",
"optimizations": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"log": [
{
"name": "string",
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"segment_ids": [
0
],
"segment_uuids": [
"550e8400-e29b-41d4-a716-446655440000"
],
"status": "optimizing",
"start_at": "2024-01-15T09:30:00Z",
"end_at": "2024-01-15T09:30:00Z"
}
]
},
"async_scorer": true,
"indexed_only_excluded_vectors": {},
"update_queue": {
"length": 0,
"op_num": 0,
"deferred_points": 0
}
},
"remote": [
{
"shard_id": 0,
"peer_id": 0,
"searches": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"updates": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
}
}
],
"replicate_states": {},
"partial_snapshot": {
"ongoing_create_snapshot_requests": 0,
"is_recovering": true,
"recovery_timestamp": 0
}
}
],
"transfers": [
{
"shard_id": 0,
"to_shard_id": 0,
"from": 0,
"to": 0,
"sync": true,
"method": "stream_records",
"comment": "string"
}
],
"resharding": [
{
"stage": "migrating_points",
"direction": "up",
"shard_id": 0,
"peer_id": 0,
"shard_key": "region_1",
"uuid": "550e8400-e29b-41d4-a716-446655440000"
}
],
"shard_clean_tasks": {}
}CollectionTelemetry
objectidstringrequiredinit_time_msinteger<uint64> | null>= 0configCollectionConfigTelemetry | anyshardsArray<ReplicaSetTelemetry> | nulltransfersArray<ShardTransferInfo> | nullreshardingArray<ReshardingTelemetry> | nullshard_clean_tasksobject | null{
"id": "string",
"init_time_ms": 0,
"config": {
"params": {
"vectors": {
"size": 1,
"distance": "Cosine",
"hnsw_config": {
"m": 0,
"ef_construct": 4,
"full_scan_threshold": 10,
"max_indexing_threads": 0,
"on_disk": true,
"memory": "cold",
"payload_m": 0,
"inline_storage": true
},
"quantization_config": {
"scalar": {
"type": "int8",
"quantile": 0.5,
"always_ram": true,
"memory": "cold"
}
},
"on_disk": true,
"memory": "cold",
"datatype": "float32",
"multivector_config": {
"comparator": "max_sim"
}
},
"shard_number": 1,
"sharding_method": "auto",
"replication_factor": 1,
"write_consistency_factor": 1,
"read_fan_out_factor": 0,
"read_fan_out_delay_ms": 0,
"on_disk_payload": true,
"payload": {
"memory": "cold"
},
"id_tracker": {
"memory": "cold"
},
"sparse_vectors": {}
},
"hnsw_config": {
"m": 0,
"ef_construct": 4,
"full_scan_threshold": 0,
"max_indexing_threads": 0,
"on_disk": true,
"memory": "cold",
"payload_m": 0,
"inline_storage": true
},
"optimizer_config": {
"deleted_threshold": 0.2,
"vacuum_min_vector_number": 1000,
"default_segment_number": 0,
"max_segment_size": null,
"memmap_threshold": null,
"indexing_threshold": null,
"flush_interval_sec": 0,
"max_optimization_threads": null,
"prevent_unoptimized": null
},
"wal_config": {
"wal_capacity_mb": 1,
"wal_segments_ahead": 0,
"wal_retain_closed": 1
},
"quantization_config": null,
"strict_mode_config": {
"enabled": true,
"max_query_limit": 0,
"max_timeout": 0,
"unindexed_filtering_retrieve": true,
"unindexed_filtering_update": true,
"search_max_hnsw_ef": 0,
"search_allow_exact": true,
"search_max_oversampling": 0,
"upsert_max_batchsize": 0,
"search_max_batchsize": 0,
"max_collection_vector_size_bytes": 0,
"read_rate_limit": 0,
"write_rate_limit": 0,
"max_collection_payload_size_bytes": 0,
"max_points_count": 0,
"filter_max_conditions": 0,
"condition_max_size": 0,
"multivector_config": {},
"sparse_config": {},
"max_payload_index_count": 0,
"max_resident_memory_percent": 0
},
"uuid": null,
"metadata": {
"city": "London",
"color": "green"
}
},
"shards": [
{
"id": 0,
"key": "region_1",
"local": {
"variant_name": "string",
"status": "green",
"total_optimized_points": 0,
"vectors_size_bytes": 0,
"payloads_size_bytes": 0,
"num_points": 0,
"num_vectors": 0,
"num_vectors_by_name": {},
"segments": [
{
"info": {
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"segment_type": "plain",
"num_vectors": 0,
"num_points": 0,
"num_deferred_points": 0,
"num_deleted_deferred_points": 0,
"num_indexed_vectors": 0,
"num_deleted_vectors": 0,
"vectors_size_bytes": 0,
"payloads_size_bytes": 0,
"ram_usage_bytes": 0,
"disk_usage_bytes": 0,
"is_appendable": true,
"index_schema": {},
"vector_data": {},
"payload_storage_io_backend": "mmap",
"deferred_internal_id": 0
},
"config": {
"vector_data": {},
"sparse_vector_data": {},
"payload_storage_type": {
"type": "mmap"
},
"id_tracker_memory": "cold"
},
"vector_index_searches": [
{
"index_name": "string",
"unfiltered_plain": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"unfiltered_hnsw": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"unfiltered_sparse": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_plain": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_small_cardinality": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_large_cardinality": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_acorn": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_exact": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_sparse": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"unfiltered_exact": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
}
}
],
"payload_field_indices": [
{
"field_name": "string",
"index_type": "string",
"points_values_count": 0,
"points_count": 0,
"histogram_bucket_size": 0
}
]
}
],
"optimizations": {
"status": "ok",
"optimizations": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"log": [
{
"name": "string",
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"segment_ids": [
0
],
"segment_uuids": [
"550e8400-e29b-41d4-a716-446655440000"
],
"status": "optimizing",
"start_at": "2024-01-15T09:30:00Z",
"end_at": "2024-01-15T09:30:00Z"
}
]
},
"async_scorer": true,
"indexed_only_excluded_vectors": {},
"update_queue": {
"length": 0,
"op_num": 0,
"deferred_points": 0
}
},
"remote": [
{
"shard_id": 0,
"peer_id": 0,
"searches": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"updates": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
}
}
],
"replicate_states": {},
"partial_snapshot": {
"ongoing_create_snapshot_requests": 0,
"is_recovering": true,
"recovery_timestamp": 0
}
}
],
"transfers": [
{
"shard_id": 0,
"to_shard_id": 0,
"from": 0,
"to": 0,
"sync": true,
"method": "stream_records",
"comment": "string"
}
],
"resharding": [
{
"stage": "migrating_points",
"direction": "up",
"shard_id": 0,
"peer_id": 0,
"shard_key": "region_1",
"uuid": "550e8400-e29b-41d4-a716-446655440000"
}
],
"shard_clean_tasks": {}
}CollectionConfigTelemetry
objectparamsCollectionParamsrequiredhnsw_configHnswConfigrequiredConfig of HNSW index
optimizer_configOptimizersConfigrequiredwal_configWalConfigrequiredquantization_configScalarQuantization | ProductQuantization | BinaryQuantization | TurboQuantization | anynullstrict_mode_configStrictModeConfigOutput | anyuuidstring<uuid> | nullnullmetadataPayload | anyArbitrary JSON metadata for the collection
{
"params": {
"vectors": {
"size": 1,
"distance": "Cosine",
"hnsw_config": {
"m": 0,
"ef_construct": 4,
"full_scan_threshold": 10,
"max_indexing_threads": 0,
"on_disk": true,
"memory": "cold",
"payload_m": 0,
"inline_storage": true
},
"quantization_config": {
"scalar": {
"type": "int8",
"quantile": 0.5,
"always_ram": true,
"memory": "cold"
}
},
"on_disk": true,
"memory": "cold",
"datatype": "float32",
"multivector_config": {
"comparator": "max_sim"
}
},
"shard_number": 1,
"sharding_method": "auto",
"replication_factor": 1,
"write_consistency_factor": 1,
"read_fan_out_factor": 0,
"read_fan_out_delay_ms": 0,
"on_disk_payload": true,
"payload": {
"memory": "cold"
},
"id_tracker": {
"memory": "cold"
},
"sparse_vectors": {}
},
"hnsw_config": {
"m": 0,
"ef_construct": 4,
"full_scan_threshold": 0,
"max_indexing_threads": 0,
"on_disk": true,
"memory": "cold",
"payload_m": 0,
"inline_storage": true
},
"optimizer_config": {
"deleted_threshold": 0.2,
"vacuum_min_vector_number": 1000,
"default_segment_number": 0,
"max_segment_size": null,
"memmap_threshold": null,
"indexing_threshold": null,
"flush_interval_sec": 0,
"max_optimization_threads": null,
"prevent_unoptimized": null
},
"wal_config": {
"wal_capacity_mb": 1,
"wal_segments_ahead": 0,
"wal_retain_closed": 1
},
"quantization_config": null,
"strict_mode_config": {
"enabled": true,
"max_query_limit": 0,
"max_timeout": 0,
"unindexed_filtering_retrieve": true,
"unindexed_filtering_update": true,
"search_max_hnsw_ef": 0,
"search_allow_exact": true,
"search_max_oversampling": 0,
"upsert_max_batchsize": 0,
"search_max_batchsize": 0,
"max_collection_vector_size_bytes": 0,
"read_rate_limit": 0,
"write_rate_limit": 0,
"max_collection_payload_size_bytes": 0,
"max_points_count": 0,
"filter_max_conditions": 0,
"condition_max_size": 0,
"multivector_config": {},
"sparse_config": {},
"max_payload_index_count": 0,
"max_resident_memory_percent": 0
},
"uuid": null,
"metadata": {
"city": "London",
"color": "green"
}
}ReplicaSetTelemetry
objectidinteger<uint32>>= 0requiredkeystring | integer | anylocalLocalShardTelemetry | anyremoteArray<RemoteShardTelemetry>requiredreplicate_statesobjectrequiredpartial_snapshotPartialSnapshotTelemetry | any{
"id": 0,
"key": "region_1",
"local": {
"variant_name": "string",
"status": "green",
"total_optimized_points": 0,
"vectors_size_bytes": 0,
"payloads_size_bytes": 0,
"num_points": 0,
"num_vectors": 0,
"num_vectors_by_name": {},
"segments": [
{
"info": {
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"segment_type": "plain",
"num_vectors": 0,
"num_points": 0,
"num_deferred_points": 0,
"num_deleted_deferred_points": 0,
"num_indexed_vectors": 0,
"num_deleted_vectors": 0,
"vectors_size_bytes": 0,
"payloads_size_bytes": 0,
"ram_usage_bytes": 0,
"disk_usage_bytes": 0,
"is_appendable": true,
"index_schema": {},
"vector_data": {},
"payload_storage_io_backend": "mmap",
"deferred_internal_id": 0
},
"config": {
"vector_data": {},
"sparse_vector_data": {},
"payload_storage_type": {
"type": "mmap"
},
"id_tracker_memory": "cold"
},
"vector_index_searches": [
{
"index_name": "string",
"unfiltered_plain": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"unfiltered_hnsw": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"unfiltered_sparse": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_plain": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_small_cardinality": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_large_cardinality": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_acorn": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_exact": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_sparse": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"unfiltered_exact": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
}
}
],
"payload_field_indices": [
{
"field_name": "string",
"index_type": "string",
"points_values_count": 0,
"points_count": 0,
"histogram_bucket_size": 0
}
]
}
],
"optimizations": {
"status": "ok",
"optimizations": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"log": [
{
"name": "string",
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"segment_ids": [
0
],
"segment_uuids": [
"550e8400-e29b-41d4-a716-446655440000"
],
"status": "optimizing",
"start_at": "2024-01-15T09:30:00Z",
"end_at": "2024-01-15T09:30:00Z"
}
]
},
"async_scorer": true,
"indexed_only_excluded_vectors": {},
"update_queue": {
"length": 0,
"op_num": 0,
"deferred_points": 0
}
},
"remote": [
{
"shard_id": 0,
"peer_id": 0,
"searches": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"updates": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
}
}
],
"replicate_states": {},
"partial_snapshot": {
"ongoing_create_snapshot_requests": 0,
"is_recovering": true,
"recovery_timestamp": 0
}
}LocalShardTelemetry
objectvariant_namestring | nullstatusShardStatus | anytotal_optimized_pointsinteger<uint>>= 0requiredTotal number of optimized points since the last start.
vectors_size_bytesinteger<uint> | null>= 0An ESTIMATION of effective amount of bytes used for vectors Do NOT rely on this number unless you know what you are doing
payloads_size_bytesinteger<uint> | null>= 0An estimation of the effective amount of bytes used for payloads Do NOT rely on this number unless you know what you are doing
num_pointsinteger<uint> | null>= 0Sum of segment points This is an approximate number Do NOT rely on this number unless you know what you are doing
num_vectorsinteger<uint> | null>= 0Sum of number of vectors in all segments This is an approximate number Do NOT rely on this number unless you know what you are doing
num_vectors_by_nameobject | nullSum of number of vectors across all segments, grouped by their name. This is an approximate number. Do NOT rely on this number unless you know what you are doing
segmentsArray<SegmentTelemetry> | nulloptimizationsOptimizerTelemetry | anyasync_scorerboolean | nullindexed_only_excluded_vectorsobject | nullupdate_queueShardUpdateQueueInfo | anyUpdate queue status
{
"variant_name": "string",
"status": "green",
"total_optimized_points": 0,
"vectors_size_bytes": 0,
"payloads_size_bytes": 0,
"num_points": 0,
"num_vectors": 0,
"num_vectors_by_name": {},
"segments": [
{
"info": {
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"segment_type": "plain",
"num_vectors": 0,
"num_points": 0,
"num_deferred_points": 0,
"num_deleted_deferred_points": 0,
"num_indexed_vectors": 0,
"num_deleted_vectors": 0,
"vectors_size_bytes": 0,
"payloads_size_bytes": 0,
"ram_usage_bytes": 0,
"disk_usage_bytes": 0,
"is_appendable": true,
"index_schema": {},
"vector_data": {},
"payload_storage_io_backend": "mmap",
"deferred_internal_id": 0
},
"config": {
"vector_data": {},
"sparse_vector_data": {},
"payload_storage_type": {
"type": "mmap"
},
"id_tracker_memory": "cold"
},
"vector_index_searches": [
{
"index_name": "string",
"unfiltered_plain": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"unfiltered_hnsw": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"unfiltered_sparse": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_plain": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_small_cardinality": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_large_cardinality": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_acorn": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_exact": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_sparse": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"unfiltered_exact": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
}
}
],
"payload_field_indices": [
{
"field_name": "string",
"index_type": "string",
"points_values_count": 0,
"points_count": 0,
"histogram_bucket_size": 0
}
]
}
],
"optimizations": {
"status": "ok",
"optimizations": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"log": [
{
"name": "string",
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"segment_ids": [
0
],
"segment_uuids": [
"550e8400-e29b-41d4-a716-446655440000"
],
"status": "optimizing",
"start_at": "2024-01-15T09:30:00Z",
"end_at": "2024-01-15T09:30:00Z"
}
]
},
"async_scorer": true,
"indexed_only_excluded_vectors": {},
"update_queue": {
"length": 0,
"op_num": 0,
"deferred_points": 0
}
}ShardStatus
stringCurrent state of the shard (supports same states as the collection)
Green - all good. Yellow - optimization is running, 'Grey' - optimizations are possible but not triggered, Red - some operations failed and was not recovered
"green"SegmentTelemetry
objectinfoSegmentInforequiredAggregated information about segment
configSegmentConfigrequiredvector_index_searchesArray<VectorIndexSearchesTelemetry>requiredpayload_field_indicesArray<PayloadIndexTelemetry>required{
"info": {
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"segment_type": "plain",
"num_vectors": 0,
"num_points": 0,
"num_deferred_points": 0,
"num_deleted_deferred_points": 0,
"num_indexed_vectors": 0,
"num_deleted_vectors": 0,
"vectors_size_bytes": 0,
"payloads_size_bytes": 0,
"ram_usage_bytes": 0,
"disk_usage_bytes": 0,
"is_appendable": true,
"index_schema": {},
"vector_data": {},
"payload_storage_io_backend": "mmap",
"deferred_internal_id": 0
},
"config": {
"vector_data": {},
"sparse_vector_data": {},
"payload_storage_type": {
"type": "mmap"
},
"id_tracker_memory": "cold"
},
"vector_index_searches": [
{
"index_name": "string",
"unfiltered_plain": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"unfiltered_hnsw": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"unfiltered_sparse": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_plain": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_small_cardinality": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_large_cardinality": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_acorn": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_exact": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_sparse": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"unfiltered_exact": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
}
}
],
"payload_field_indices": [
{
"field_name": "string",
"index_type": "string",
"points_values_count": 0,
"points_count": 0,
"histogram_bucket_size": 0
}
]
}SegmentInfo
objectAggregated information about segment
uuidstring<uuid>requiredsegment_typeSegmentTypeplainindexedspecialrequiredType of segment
num_vectorsinteger<uint>>= 0requirednum_pointsinteger<uint>>= 0requirednum_deferred_pointsinteger<uint> | null>= 0num_deleted_deferred_pointsinteger<uint> | null>= 0num_indexed_vectorsinteger<uint>>= 0requirednum_deleted_vectorsinteger<uint>>= 0requiredvectors_size_bytesinteger<uint>>= 0requiredAn ESTIMATION of effective amount of bytes used for vectors Do NOT rely on this number unless you know what you are doing
payloads_size_bytesinteger<uint>>= 0requiredAn estimation of the effective amount of bytes used for payloads
ram_usage_bytesinteger<uint>>= 0requireddisk_usage_bytesinteger<uint>>= 0requiredis_appendablebooleanrequiredindex_schemaobjectrequiredvector_dataobjectrequiredpayload_storage_io_backendIoBackend | anyUniversal I/O backend that payload storage reads files with. Absent if payload storage does not support configurable backends or only supports a single backend type.
deferred_internal_idinteger<uint32> | null>= 0Internal ID from which points are deferred (hidden from reads). Only set for appendable segments.
{
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"segment_type": "plain",
"num_vectors": 0,
"num_points": 0,
"num_deferred_points": 0,
"num_deleted_deferred_points": 0,
"num_indexed_vectors": 0,
"num_deleted_vectors": 0,
"vectors_size_bytes": 0,
"payloads_size_bytes": 0,
"ram_usage_bytes": 0,
"disk_usage_bytes": 0,
"is_appendable": true,
"index_schema": {},
"vector_data": {},
"payload_storage_io_backend": "mmap",
"deferred_internal_id": 0
}VectorDataInfo
objectnum_vectorsinteger<uint>>= 0requirednum_indexed_vectorsinteger<uint>>= 0requirednum_deleted_vectorsinteger<uint>>= 0requiredio_backendIoBackend | anyUniversal I/O backend that this vector storage reads files with. Absent if vector storage does not support configurable backends or only supports a single backend type.
{
"num_vectors": 0,
"num_indexed_vectors": 0,
"num_deleted_vectors": 0,
"io_backend": "mmap"
}IoBackend
stringUniversal I/O backend that is used to read files.
Decided when the component is opened based on storage.performance.io_uring option, component memory placement and kernel io_uring support.
Options:
Mmap- Reads are served by the page cache through a memory mapping.IoUring- Reads are submitted to the kernel with io_uring.
"mmap"SegmentConfig
objectvector_dataobject[object Object]sparse_vector_dataobjectpayload_storage_typeobject | objectrequiredType of payload storage
id_tracker_memoryMemory | anyMemory placement of the id tracker in non-appendable segments. Unset means the deployment default: cold in serverless-compatible mode, pinned otherwise.
{
"vector_data": {},
"sparse_vector_data": {},
"payload_storage_type": {
"type": "mmap"
},
"id_tracker_memory": "cold"
}VectorDataConfig
objectConfig of single vector data storage
sizeinteger<uint>>= 0requiredSize/dimensionality of the vectors used
distanceDistanceCosineEuclidDotManhattanrequiredType of internal tags, build from payload Distance function types used to compare vectors
storage_typestring | string | string | string | string | stringrequiredStorage types for vectors
indexobject | objectrequiredVector index configuration
quantization_configScalarQuantization | ProductQuantization | BinaryQuantization | TurboQuantization | anyVector specific quantization config that overrides collection config
multivector_configMultiVectorConfig | anyVector specific configuration to enable multiple vectors per point
datatypeVectorStorageDatatype | anyVector specific configuration to set specific storage element type
{
"size": 0,
"distance": "Cosine",
"storage_type": "Memory",
"index": {
"type": "plain",
"options": {}
},
"quantization_config": {
"scalar": {
"type": "int8",
"quantile": 0.5,
"always_ram": true,
"memory": "cold"
}
},
"multivector_config": {
"comparator": "max_sim"
},
"datatype": "float32"
}VectorStorageType
objectStorage types for vectors
Storage in memory (RAM)
Will be very fast at the cost of consuming a lot of memory.
Storage in mmap file, not appendable
Search performance is defined by disk speed and the fraction of vectors that fit in memory.
Storage in chunked mmap files, appendable
Search performance is defined by disk speed and the fraction of vectors that fit in memory.
Same as ChunkedMmap, but vectors are forced to be locked in RAM In this way we avoid cold requests to disk, but risk to run out of memory
Storage in a single mmap file, not appendable Pre-fetched into RAM on load
Vectors are inlined in the HNSW links file, not in a dedicated storage. Not appendable.
"Memory"Indexes
objectVector index configuration
typestringplainrequiredoptionsobjectrequiredtypestringhnswrequiredoptionsHnswConfigrequiredConfig of HNSW index
{
"type": "plain",
"options": {}
}VectorStorageDatatype
stringStorage types for vectors
"float32"SparseVectorDataConfig
objectConfig of single sparse vector data storage
indexSparseIndexConfigrequiredConfiguration for sparse inverted index.
storage_typestringmodifierModifier | anyConfigures addition value modifications for sparse vectors. Default: none
{
"index": {
"full_scan_threshold": 0,
"index_type": "MutableRam",
"datatype": "float32",
"memory": "cold"
},
"storage_type": "mmap",
"modifier": "none"
}SparseIndexConfig
objectConfiguration for sparse inverted index.
full_scan_thresholdinteger<uint> | null>= 0We prefer a full scan search upto (excluding) this number of vectors.
Note: this is number of vectors, not KiloBytes.
index_typestring | string | stringrequiredSparse index types
datatypeVectorStorageDatatype | anyDatatype used to store weights in the index.
memoryMemory | anyRequested memory placement of the index.
The structural decision is carried by index_type; this field additionally distinguishes cold from cached for the mmap index variant.
{
"full_scan_threshold": 0,
"index_type": "MutableRam",
"datatype": "float32",
"memory": "cold"
}SparseIndexType
objectSparse index types
Mutable RAM sparse index
Immutable RAM sparse index
Mmap sparse index
"MutableRam"SparseVectorStorageType
objectStorage in memory maps (gridstore storage)
"mmap"PayloadStorageType
objectType of payload storage
typestringmmaprequiredtypestringin_ram_mmaprequired{
"type": "mmap"
}VectorIndexSearchesTelemetry
objectindex_namestring | nullunfiltered_plainOperationDurationStatisticsrequiredunfiltered_hnswOperationDurationStatisticsrequiredunfiltered_sparseOperationDurationStatisticsrequiredfiltered_plainOperationDurationStatisticsrequiredfiltered_small_cardinalityOperationDurationStatisticsrequiredfiltered_large_cardinalityOperationDurationStatisticsrequiredfiltered_acornOperationDurationStatisticsfiltered_exactOperationDurationStatisticsrequiredfiltered_sparseOperationDurationStatisticsrequiredunfiltered_exactOperationDurationStatisticsrequired{
"index_name": "string",
"unfiltered_plain": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"unfiltered_hnsw": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"unfiltered_sparse": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_plain": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_small_cardinality": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_large_cardinality": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_acorn": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_exact": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"filtered_sparse": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"unfiltered_exact": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
}
}OperationDurationStatistics
objectcountinteger<uint>>= 0requiredfail_countinteger<uint> | null>= 0avg_duration_microsnumber<float> | nullThe average time taken by 128 latest operations, calculated as a weighted mean.
min_duration_microsnumber<float> | nullThe minimum duration of the operations across all the measurements.
max_duration_microsnumber<float> | nullThe maximum duration of the operations across all the measurements.
total_duration_microsinteger<uint64> | null>= 0The total duration of all operations in microseconds.
last_respondedstring<date-time> | null{
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
}PayloadIndexTelemetry
objectfield_namestring | nullindex_typestringrequiredpoints_values_countinteger<uint>>= 0requiredThe amount of values indexed for all points.
points_countinteger<uint>>= 0requiredThe amount of points that have at least one value indexed.
histogram_bucket_sizeinteger<uint> | null>= 0{
"field_name": "string",
"index_type": "string",
"points_values_count": 0,
"points_count": 0,
"histogram_bucket_size": 0
}OptimizerTelemetry
objectstatusstring | objectrequiredCurrent state of the collection
optimizationsOperationDurationStatisticsrequiredlogArray<TrackerTelemetry> | null{
"status": "ok",
"optimizations": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"log": [
{
"name": "string",
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"segment_ids": [
0
],
"segment_uuids": [
"550e8400-e29b-41d4-a716-446655440000"
],
"status": "optimizing",
"start_at": "2024-01-15T09:30:00Z",
"end_at": "2024-01-15T09:30:00Z"
}
]
}TrackerTelemetry
objectTracker object used in telemetry
namestringrequiredName of the optimizer
uuidstring<uuid>requiredUUID of the upcoming segment being created by the optimizer
segment_idsArray<integer>requiredInternal segment IDs being optimized. These are local and in-memory, meaning that they can refer to different segments after a service restart.
segment_uuidsArray<string>requiredSegment UUIDs being optimized. Refers to same segments as in segment_ids, but trackable across restarts, and reflect their directory name.
statusstring | object | objectrequiredRepresents the current state of the optimizer being tracked
start_atstring<date-time>requiredStart time of the optimizer
end_atstring<date-time> | nullEnd time of the optimizer
{
"name": "string",
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"segment_ids": [
0
],
"segment_uuids": [
"550e8400-e29b-41d4-a716-446655440000"
],
"status": "optimizing",
"start_at": "2024-01-15T09:30:00Z",
"end_at": "2024-01-15T09:30:00Z"
}TrackerStatus
objectRepresents the current state of the optimizer being tracked
cancelledstringrequirederrorstringrequired"optimizing"ShardUpdateQueueInfo
objectlengthinteger<uint>>= 0requiredNumber of elements in the queue
op_numinteger<uint> | null>= 0last operation number processed
deferred_pointsinteger<uint> | null>= 0Number of points that are deferred (i.e hidden from search as they're not yet optimized).
{
"length": 0,
"op_num": 0,
"deferred_points": 0
}RemoteShardTelemetry
objectshard_idinteger<uint32>>= 0requiredpeer_idinteger<uint64>>= 0requiredsearchesOperationDurationStatistics | anyupdatesOperationDurationStatistics | any{
"shard_id": 0,
"peer_id": 0,
"searches": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
},
"updates": {
"count": 0,
"fail_count": 0,
"avg_duration_micros": 0,
"min_duration_micros": 0,
"max_duration_micros": 0,
"total_duration_micros": 0,
"last_responded": "2024-01-15T09:30:00Z"
}
}PartialSnapshotTelemetry
objectongoing_create_snapshot_requestsinteger<uint>>= 0requiredis_recoveringbooleanrequiredrecovery_timestampinteger<uint64>>= 0required{
"ongoing_create_snapshot_requests": 0,
"is_recovering": true,
"recovery_timestamp": 0
}ReshardingTelemetry
objectstageReshardingStagemigrating_pointsread_hash_ring_committedwrite_hash_ring_committedrequiredResharding stages
directionReshardingDirectionupdownrequiredResharding direction, scale up or down in number of shards
up- Scale up, add a new sharddown- Scale down, remove a shard
shard_idinteger<uint32>>= 0requiredpeer_idinteger<uint64>>= 0requiredshard_keystring | integer | anyuuidstring<uuid>required{
"stage": "migrating_points",
"direction": "up",
"shard_id": 0,
"peer_id": 0,
"shard_key": "region_1",
"uuid": "550e8400-e29b-41d4-a716-446655440000"
}ReshardingStage
stringResharding stages
"migrating_points"ShardCleanStatusTelemetry
objectprogressShardCleanStatusProgressTelemetryrequiredfailedShardCleanStatusFailedTelemetryrequired"started"ShardCleanStatusProgressTelemetry
objectdeleted_pointsinteger<uint>>= 0required{
"deleted_points": 0
}CollectionsAggregatedTelemetry
objectvectorsinteger<uint>>= 0requiredoptimizers_statusstring | objectrequiredCurrent state of the collection
paramsCollectionParamsrequired{
"vectors": 0,
"optimizers_status": "ok",
"params": {
"vectors": {
"size": 1,
"distance": "Cosine",
"hnsw_config": {
"m": 0,
"ef_construct": 4,
"full_scan_threshold": 10,
"max_indexing_threads": 0,
"on_disk": true,
"memory": "cold",
"payload_m": 0,
"inline_storage": true
},
"quantization_config": {
"scalar": {
"type": "int8",
"quantile": 0.5,
"always_ram": true,
"memory": "cold"
}
},
"on_disk": true,
"memory": "cold",
"datatype": "float32",
"multivector_config": {
"comparator": "max_sim"
}
},
"shard_number": 1,
"sharding_method": "auto",
"replication_factor": 1,
"write_consistency_factor": 1,
"read_fan_out_factor": 0,
"read_fan_out_delay_ms": 0,
"on_disk_payload": true,
"payload": {
"memory": "cold"
},
"id_tracker": {
"memory": "cold"
},
"sparse_vectors": {}
}
}CollectionSnapshotTelemetry
objectidstringrequiredrunning_snapshotsinteger<uint> | null>= 0running_snapshot_recoveryinteger<uint> | null>= 0total_snapshot_creationsinteger<uint> | null>= 0{
"id": "string",
"running_snapshots": 0,
"running_snapshot_recovery": 0,
"total_snapshot_creations": 0
}ClusterTelemetry
objectenabledbooleanrequiredstatusClusterStatusTelemetry | anyconfigClusterConfigTelemetry | anypeersobject | nullpeer_metadataobject | nullmetadataobject | nullresharding_enabledboolean | null{
"enabled": true,
"status": {
"number_of_peers": 0,
"term": 0,
"commit": 0,
"pending_operations": 0,
"role": "Follower",
"is_voter": true,
"peer_id": 0,
"consensus_thread_status": {
"consensus_thread_status": "working",
"last_update": "2024-01-15T09:30:00Z"
}
},
"config": {
"grpc_timeout_ms": 0,
"p2p": {
"connection_pool_size": 0
},
"consensus": {
"max_message_queue_size": 0,
"tick_period_ms": 0,
"bootstrap_timeout_sec": 0
}
},
"peers": {},
"peer_metadata": {},
"metadata": {},
"resharding_enabled": true
}ClusterStatusTelemetry
objectnumber_of_peersinteger<uint>>= 0requiredterminteger<uint64>>= 0requiredcommitinteger<uint64>>= 0requiredpending_operationsinteger<uint>>= 0requiredroleStateRole | anyis_voterbooleanrequiredpeer_idinteger<uint64> | null>= 0consensus_thread_statusobject | object | objectrequiredInformation about current consensus thread status
{
"number_of_peers": 0,
"term": 0,
"commit": 0,
"pending_operations": 0,
"role": "Follower",
"is_voter": true,
"peer_id": 0,
"consensus_thread_status": {
"consensus_thread_status": "working",
"last_update": "2024-01-15T09:30:00Z"
}
}ClusterConfigTelemetry
objectgrpc_timeout_msinteger<uint64>>= 0requiredp2pP2pConfigTelemetryrequiredconsensusConsensusConfigTelemetryrequired{
"grpc_timeout_ms": 0,
"p2p": {
"connection_pool_size": 0
},
"consensus": {
"max_message_queue_size": 0,
"tick_period_ms": 0,
"bootstrap_timeout_sec": 0
}
}P2pConfigTelemetry
objectconnection_pool_sizeinteger<uint>>= 0required{
"connection_pool_size": 0
}ConsensusConfigTelemetry
objectmax_message_queue_sizeinteger<uint>>= 0requiredtick_period_msinteger<uint64>>= 0requiredbootstrap_timeout_secinteger<uint64>>= 0required{
"max_message_queue_size": 0,
"tick_period_ms": 0,
"bootstrap_timeout_sec": 0
}PeerMetadata
objectMetadata describing extra properties for each peer
versionstringrequiredPeer Qdrant version
{
"version": "string"
}RequestsTelemetry
objectrestWebApiTelemetryrequiredgrpcGrpcTelemetryrequired{
"rest": {
"responses": {},
"per_collection_responses": {}
},
"grpc": {
"responses": {},
"per_collection_responses": {}
}
}WebApiTelemetry
objectresponsesobjectrequiredper_collection_responsesobject{
"responses": {},
"per_collection_responses": {}
}GrpcTelemetry
objectresponsesobjectrequiredper_collection_responsesobject{
"responses": {},
"per_collection_responses": {}
}MemoryTelemetry
objectactive_bytesinteger<uint>>= 0requiredTotal number of bytes in active pages allocated by the application
allocated_bytesinteger<uint>>= 0requiredTotal number of bytes allocated by the application
metadata_bytesinteger<uint>>= 0requiredTotal number of bytes dedicated to metadata
resident_bytesinteger<uint>>= 0requiredMaximum number of bytes in physically resident data pages mapped
retained_bytesinteger<uint>>= 0requiredTotal number of bytes in virtual memory mappings
{
"active_bytes": 0,
"allocated_bytes": 0,
"metadata_bytes": 0,
"resident_bytes": 0,
"retained_bytes": 0
}HardwareUsage
objectUsage of the hardware resources, spent to process the request
cpuinteger<uint>>= 0requiredpayload_io_readinteger<uint>>= 0requiredpayload_io_writeinteger<uint>>= 0requiredpayload_index_io_readinteger<uint>>= 0requiredpayload_index_io_writeinteger<uint>>= 0requiredvector_io_readinteger<uint>>= 0requiredvector_io_writeinteger<uint>>= 0required{
"cpu": 0,
"payload_io_read": 0,
"payload_io_write": 0,
"payload_index_io_read": 0,
"payload_index_io_write": 0,
"vector_io_read": 0,
"vector_io_write": 0
}SearchThreadPoolTelemetry
objectLive snapshot of the adaptive search routing.
mode is the runtime currently selected by [SearchMode]; high_cpu_threads and high_io_threads are the blocking-thread budgets of the two underlying runtimes that the adaptive handle routes between.
modestringrequiredCurrently active mode (high_cpu or high_io).
high_cpu_threadsinteger<uint>>= 0requiredBlocking-thread count of the high-CPU runtime.
high_io_threadsinteger<uint>>= 0requiredBlocking-thread count of the high-IO runtime.
{
"mode": "string",
"high_cpu_threads": 0,
"high_io_threads": 0
}QuotaTelemetry
objectWhat a node reports about the quota it is enforcing.
Carries the verdict rather than the raw utilization, because the point of reporting it is to know whether this node is currently refusing writes — which depends on the limits as well as the readings.
configQuotaConfigrequiredCluster-wide limits on node resources.
An unset limit means the corresponding resource is not capped. Limits are only enforced while enabled is true.
exceededQuotaExceededrequiredWhich of the enforced limits a node is currently refusing work over.
Reported per resource because they are freed by different actions: disk by deleting or optimizing, memory by unloading. A single flag would not say which one to go and fix.
true outlasts the reading that caused it: a resource that reaches its limit stays flagged until it has fallen a margin below, so that one resting near the limit does not flip the node in and out of service. Expect to see it set while the reported utilization is already back under the configured limit.
A field is null when the node is not enforcing that resource — the quota is disabled, no limit is set for it, or it cannot be measured here. That is deliberately distinct from false: a resource that can never trip must not be reported as one that is within its limits, or it invites an alert that can never fire.
{
"config": {
"enabled": false,
"max_resident_memory_percent": 1,
"max_disk_usage_percent": 1,
"release_margin_percent": 0
},
"exceeded": {
"resident_memory": true,
"disk_usage": true
}
}QuotaConfig
objectCluster-wide limits on node resources.
An unset limit means the corresponding resource is not capped. Limits are only enforced while enabled is true.
enabledbooleanfalseWhether the limits below are enforced.
max_resident_memory_percentinteger<uint8> | null[1, 100]Reject memory-consuming updates once process resident memory reaches this percentage of total system memory (or of the cgroup limit, if one applies).
max_disk_usage_percentinteger<uint8> | null[1, 100]Reject disk-consuming updates once the filesystem hosting the storage directory is filled to this percentage of its capacity.
release_margin_percentinteger<uint8> | null[0, 100]How many percentage points below its limit a resource has to fall before this node starts accepting work again.
Without a margin, a resource resting on its limit crosses it in both directions on the noise between two readings, putting the node in and out of service each time — and restarting a shard recovery with it. Raise it where usage is volatile; 0 disables the margin and releases as soon as usage is back under the limit.
Unset leaves the built-in default in force, so a config written today does not pin a number that a later release may want to revise.
{
"enabled": false,
"max_resident_memory_percent": 1,
"max_disk_usage_percent": 1,
"release_margin_percent": 0
}QuotaExceeded
objectWhich of the enforced limits a node is currently refusing work over.
Reported per resource because they are freed by different actions: disk by deleting or optimizing, memory by unloading. A single flag would not say which one to go and fix.
true outlasts the reading that caused it: a resource that reaches its limit stays flagged until it has fallen a margin below, so that one resting near the limit does not flip the node in and out of service. Expect to see it set while the reported utilization is already back under the configured limit.
A field is null when the node is not enforcing that resource — the quota is disabled, no limit is set for it, or it cannot be measured here. That is deliberately distinct from false: a resource that can never trip must not be reported as one that is within its limits, or it invites an alert that can never fire.
resident_memoryboolean | nulldisk_usageboolean | null{
"resident_memory": true,
"disk_usage": true
}ClusterOperations
objectmove_shardMoveShardrequiredreplicate_shardReplicateShardrequiredabort_transferAbortShardTransferrequireddrop_replicaReplicarequiredcreate_sharding_keyCreateShardingKeyrequireddrop_sharding_keyDropShardingKeyrequiredrestart_transferRestartTransferrequiredstart_reshardingStartReshardingrequiredabort_reshardingAbortReshardingrequired{
"move_shard": {
"shard_id": 0,
"to_peer_id": 0,
"from_peer_id": 0,
"method": "stream_records"
}
}MoveShardOperation
objectmove_shardMoveShardrequired{
"move_shard": {
"shard_id": 0,
"to_peer_id": 0,
"from_peer_id": 0,
"method": "stream_records"
}
}MoveShard
objectshard_idinteger<uint32>>= 0requiredto_peer_idinteger<uint64>>= 0requiredfrom_peer_idinteger<uint64>>= 0requiredmethodShardTransferMethod | anyMethod for transferring the shard from one node to another
{
"shard_id": 0,
"to_peer_id": 0,
"from_peer_id": 0,
"method": "stream_records"
}ReplicateShardOperation
objectreplicate_shardReplicateShardrequired{
"replicate_shard": {
"shard_id": 0,
"to_peer_id": 0,
"from_peer_id": 0,
"method": "stream_records"
}
}ReplicateShard
objectshard_idinteger<uint32>>= 0requiredto_peer_idinteger<uint64>>= 0requiredfrom_peer_idinteger<uint64>>= 0requiredmethodShardTransferMethod | anyMethod for transferring the shard from one node to another
{
"shard_id": 0,
"to_peer_id": 0,
"from_peer_id": 0,
"method": "stream_records"
}AbortTransferOperation
objectabort_transferAbortShardTransferrequired{
"abort_transfer": {
"shard_id": 0,
"to_peer_id": 0,
"from_peer_id": 0
}
}AbortShardTransfer
objectshard_idinteger<uint32>>= 0requiredto_peer_idinteger<uint64>>= 0requiredfrom_peer_idinteger<uint64>>= 0required{
"shard_id": 0,
"to_peer_id": 0,
"from_peer_id": 0
}DropReplicaOperation
objectdrop_replicaReplicarequired{
"drop_replica": {
"shard_id": 0,
"peer_id": 0
}
}Replica
objectshard_idinteger<uint32>>= 0requiredpeer_idinteger<uint64>>= 0required{
"shard_id": 0,
"peer_id": 0
}CreateShardingKeyOperation
objectcreate_sharding_keyCreateShardingKeyrequired{
"create_sharding_key": {
"shard_key": "region_1",
"shards_number": 1,
"replication_factor": 1,
"placement": [
0
],
"initial_state": "Active"
}
}CreateShardingKey
objectshard_keystring | integerrequiredshards_numberinteger<uint32> | null>= 1How many shards to create for this key If not specified, will use the default value from config
replication_factorinteger<uint32> | null>= 1How many replicas to create for each shard If not specified, will use the default value from config
placementArray<integer> | nullPlacement of shards for this key List of peer ids, that can be used to place shards for this key If not specified, will be randomly placed among all peers
initial_stateReplicaState | anyInitial state of the shards for this key If not specified, will be Initializing first and then Active Warning: do not change this unless you know what you are doing
{
"shard_key": "region_1",
"shards_number": 1,
"replication_factor": 1,
"placement": [
0
],
"initial_state": "Active"
}DropShardingKeyOperation
objectdrop_sharding_keyDropShardingKeyrequired{
"drop_sharding_key": {
"shard_key": "region_1"
}
}RestartTransferOperation
objectrestart_transferRestartTransferrequired{
"restart_transfer": {
"shard_id": 0,
"from_peer_id": 0,
"to_peer_id": 0,
"method": "stream_records"
}
}RestartTransfer
objectshard_idinteger<uint32>>= 0requiredfrom_peer_idinteger<uint64>>= 0requiredto_peer_idinteger<uint64>>= 0requiredmethodShardTransferMethodstream_recordssnapshotwal_deltaresharding_stream_recordsrequiredMethods for transferring a shard from one node to another.
stream_records- Stream all shard records in batches until the whole shard is transferred.snapshot- Snapshot the shard, transfer and restore it on the receiver.wal_delta- Attempt to transfer shard difference by WAL delta.resharding_stream_records- Shard transfer for resharding: stream all records in batches until all points are transferred.
{
"shard_id": 0,
"from_peer_id": 0,
"to_peer_id": 0,
"method": "stream_records"
}StartReshardingOperation
objectstart_reshardingStartReshardingrequired{
"start_resharding": {
"direction": "up",
"peer_id": 0,
"shard_key": "region_1"
}
}StartResharding
objectdirectionReshardingDirectionupdownrequiredResharding direction, scale up or down in number of shards
up- Scale up, add a new sharddown- Scale down, remove a shard
peer_idinteger<uint64> | null>= 0Peer to create the new shard on, or to migrate points away from when scaling down. If not specified, the least loaded peer is picked when scaling up, a peer holding the removed shard when scaling down.
shard_keystring | integer | anyCustom shard key to reshard, must already exist. If not specified, shards without a shard key are resharded.
{
"direction": "up",
"peer_id": 0,
"shard_key": "region_1"
}AbortReshardingOperation
objectabort_reshardingAbortReshardingrequired{
"abort_resharding": {}
}ReplicatePoints
objectfilterFilter | anyfrom_shard_keystring | integerrequiredto_shard_keystring | integerrequired{
"from_shard_key": "region_1",
"to_shard_key": "region_1"
}SnapshotRecover
objectlocationstring<uri>requiredExamples: - URL http://localhost:8080/collections/my_collection/snapshots/my_snapshot - Local path file:///qdrant/snapshots/test_collection-2022-08-04-10-49-10.snapshot
prioritySnapshotPriority | anynullDefines which data should be used as a source of truth if there are other replicas in the cluster. If set to Snapshot, the snapshot will be used as a source of truth, and the current state will be overwritten. If set to Replica, the current state will be used as a source of truth, and after recovery it will be synchronized from other replicas.
checksumstring | nullnullOptional SHA256 checksum to verify snapshot integrity before recovery.
api_keystring | nullnullOptional API key used when fetching the snapshot from a remote URL.
{
"location": "https://example.com",
"priority": null,
"checksum": null,
"api_key": null
}SnapshotPriority
stringDefines source of truth for snapshot recovery:
NoSync means - restore snapshot without any additional synchronization. Snapshot means - prefer snapshot data over the current state. Replica means - prefer existing data over the snapshot.
"no_sync"CollectionsAliasesResponse
objectaliasesArray<AliasDescription>required{
"aliases": [
{
"alias_name": "blogs-title",
"collection_name": "arivx-title"
}
]
}AliasDescription
objectalias_namestringrequiredcollection_namestringrequired{
"alias_name": "blogs-title",
"collection_name": "arivx-title"
}WriteOrdering
stringDefines write ordering guarantees for collection operations
weak- write operations may be reordered, works faster, defaultmedium- write operations go through dynamically selected leader, may be inconsistent for a short period of time in case of leader changestrong- Write operations go through the permanent leader, consistent, but may be unavailable if leader is down
"weak"ReadConsistency
objectRead consistency parameter
Defines how many replicas should be queried to get the result
N- send N random request and return points, which present on all of themmajority- send N/2+1 random request and return points, which present on all of themquorum- send requests to all nodes and return points which present on majority of themall- send requests to all nodes and return points which present on all of them
Default value is Factor(1)
majority- send N/2+1 random request and return points, which present on all of themquorum- send requests to all nodes and return points which present on majority of nodesall- send requests to all nodes and return points which present on all nodes
1ReadConsistencyType
stringmajority- send N/2+1 random request and return points, which present on all of themquorum- send requests to all nodes and return points which present on majority of nodesall- send requests to all nodes and return points which present on all nodes
"majority"UpdateVectors
objectpointsArray<PointVectors>requiredPoints with named vectors
shard_keystring | integer | Array<ShardKey> | ShardKeyWithFallback | anyupdate_filterFilter | any{
"points": [
{
"id": 42,
"vector": [
0.875,
0.140625,
0.897599995136261
]
}
],
"shard_key": "region_1"
}PointVectors
objectidinteger | stringrequiredType, used for specifying point ID in user interface
vectorArray<number> | Array<Array<number>> | object | Document | Image | InferenceObjectrequiredFull vector data per point separator with single and multiple vector modes
{
"id": 42,
"vector": [
0.875,
0.140625,
0.897599995136261
]
}DeleteVectors
objectpointsArray<ExtendedPointId> | nullDeletes values from each point in this list
filterFilter | anyDeletes values from points that satisfy this filter condition
vectorArray<string>requiredVector names
shard_keystring | integer | Array<ShardKey> | ShardKeyWithFallback | any{
"points": [
42
],
"vector": [
"string"
],
"shard_key": "region_1"
}PointGroup
objecthitsArray<ScoredPoint>requiredScored points that have the same value of the group_by key
idstring | integer | integerrequiredValue of the group_by key, shared across all the hits in the group
lookupRecord | anyRecord that has been looked up using the group id
{
"hits": [
{
"id": 42,
"version": 3,
"score": 0.75,
"payload": {
"city": "London",
"color": "green"
},
"vector": [
0.875,
0.140625,
0.897599995136261
],
"shard_key": "region_1",
"order_value": 42
}
],
"id": "string",
"lookup": {
"id": 42,
"payload": {
"city": "London",
"color": "green"
},
"vector": [
0.875,
0.140625,
0.897599995136261
],
"shard_key": "region_1",
"order_value": 42
}
}GroupId
objectValue of the group_by key, shared across all the hits in the group
"string"GroupsResult
objectgroupsArray<PointGroup>required{
"groups": [
{
"hits": [
{
"id": 42,
"version": 3,
"score": 0.75,
"payload": {
"city": "London",
"color": "green"
},
"vector": [
0.875,
0.140625,
0.897599995136261
],
"shard_key": "region_1",
"order_value": 42
}
],
"id": "string",
"lookup": {
"id": 42,
"payload": {
"city": "London",
"color": "green"
},
"vector": [
0.875,
0.140625,
0.897599995136261
],
"shard_key": "region_1",
"order_value": 42
}
}
]
}ShardSnapshotRecover
objectlocationstring | stringrequiredprioritySnapshotPriority | anynullchecksumstring | nullnullOptional SHA256 checksum to verify snapshot integrity before recovery.
api_keystring | nullnullOptional API key used when fetching the snapshot from a remote URL.
{
"location": "https://example.com",
"priority": null,
"checksum": null,
"api_key": null
}VersionInfo
objecttitlestringrequiredversionstringrequiredcommitstring | null{
"title": "string",
"version": "string",
"commit": "string"
}CollectionExistence
objectState of existence of a collection, true = exists, false = does not exist
existsbooleanrequired{
"exists": true
}QueryRequest
objectshard_keystring | integer | Array<ShardKey> | ShardKeyWithFallback | anyprefetchPrefetch | Array<Prefetch> | anynullSub-requests to perform first. If present, the query will be performed on the results of the prefetch(es).
queryQueryInterface | anyQuery to perform. If missing without prefetches, returns points ordered by their IDs.
usingstring | nullDefine which vector name to use for querying. If missing, the default vector is used.
filterFilter | anyFilter conditions - return only those points that satisfy the specified conditions.
paramsSearchParams | anySearch params for when there is no prefetch
score_thresholdnumber<float> | nullReturn points with scores better than this threshold.
limitinteger<uint> | null>= 1Max number of points to return. Default is 10.
offsetinteger<uint> | null>= 0Offset of the result. Skip this many points. Default is 0
with_vectorboolean | Array<string> | anyOptions for specifying which vectors to include into the response. Default is false.
with_payloadboolean | Array<string> | PayloadSelectorInclude | PayloadSelectorExclude | anyOptions for specifying which payload to include or not. Default is false.
lookup_fromLookupLocation | anynullThe location to use for IDs lookup, if not specified - use the current collection and the 'using' vector Note: the other collection vectors should have the same vector size as the 'using' vector in the current collection
{
"shard_key": "region_1",
"prefetch": null,
"using": "string",
"score_threshold": 0,
"limit": 1,
"offset": 0,
"with_vector": true,
"with_payload": true,
"lookup_from": null
}Prefetch
objectprefetchPrefetch | Array<Prefetch> | anynullSub-requests to perform first. If present, the query will be performed on the results of the prefetches.
queryQueryInterface | anyQuery to perform. If missing without prefetches, returns points ordered by their IDs.
usingstring | nullDefine which vector name to use for querying. If missing, the default vector is used.
filterFilter | anyFilter conditions - return only those points that satisfy the specified conditions.
paramsSearchParams | anySearch params for when there is no prefetch
score_thresholdnumber<float> | nullReturn points with scores better than this threshold.
limitinteger<uint> | null>= 1Max number of points to return. Default is 10.
lookup_fromLookupLocation | anynullThe location to use for IDs lookup, if not specified - use the current collection and the 'using' vector Note: the other collection vectors should have the same vector size as the 'using' vector in the current collection
{
"prefetch": null,
"using": "string",
"score_threshold": 0,
"limit": 1,
"lookup_from": null
}QueryInterface
objectindicesArray<integer>requiredIndices must be unique
valuesArray<number>requiredValues and indices must be the same length
Type, used for specifying point ID in user interface
textstringrequiredText of the document. This field will be used as input for the embedding model.
modelstringrequiredName of the model used to generate the vector. List of available models depends on a provider.
optionsobject | Bm25Config | anyAdditional options for the model, will be passed to the inference service as-is. See model cards for available options.
imageanyrequiredImage data: base64 encoded image or an URL
modelstringrequiredName of the model used to generate the vector. List of available models depends on a provider.
optionsobject | nullParameters for the model Values of the parameters are model-specific
objectanyrequiredArbitrary data, used as input for the embedding model. Used if the model requires more than one input or a custom input.
modelstringrequiredName of the model used to generate the vector. List of available models depends on a provider.
optionsobject | nullParameters for the model Values of the parameters are model-specific
[
0
]VectorInput
objectindicesArray<integer>requiredIndices must be unique
valuesArray<number>requiredValues and indices must be the same length
Type, used for specifying point ID in user interface
textstringrequiredText of the document. This field will be used as input for the embedding model.
modelstringrequiredName of the model used to generate the vector. List of available models depends on a provider.
optionsobject | Bm25Config | anyAdditional options for the model, will be passed to the inference service as-is. See model cards for available options.
imageanyrequiredImage data: base64 encoded image or an URL
modelstringrequiredName of the model used to generate the vector. List of available models depends on a provider.
optionsobject | nullParameters for the model Values of the parameters are model-specific
objectanyrequiredArbitrary data, used as input for the embedding model. Used if the model requires more than one input or a custom input.
modelstringrequiredName of the model used to generate the vector. List of available models depends on a provider.
optionsobject | nullParameters for the model Values of the parameters are model-specific
[
0
]Query
objectnearestArray<number> | SparseVector | Array<Array<number>> | integer | string | Document | Image | InferenceObjectrequiredmmrMmr | anyPerform MMR (Maximal Marginal Relevance) reranking after search, using the same vector in this query to calculate relevance.
recommendRecommendInputrequireddiscoverDiscoverInputrequiredcontextContextPair | Array<ContextPair> | anyrequiredorder_bystring | OrderByrequiredfusionFusionrrfdbsfrequiredFusion algorithm allows to combine results of multiple prefetches.
Available fusion algorithms:
rrf- Reciprocal Rank Fusion (with default parameters) *dbsf- Distribution-Based Score Fusion
rrfRrfrequiredParameters for Reciprocal Rank Fusion
sampleSamplerandomrequiredrelevance_feedbackRelevanceFeedbackInputrequired{
"nearest": [
0
],
"mmr": {
"diversity": 0,
"candidates_limit": 0
}
}NearestQuery
objectnearestArray<number> | SparseVector | Array<Array<number>> | integer | string | Document | Image | InferenceObjectrequiredmmrMmr | anyPerform MMR (Maximal Marginal Relevance) reranking after search, using the same vector in this query to calculate relevance.
{
"nearest": [
0
],
"mmr": {
"diversity": 0,
"candidates_limit": 0
}
}Mmr
objectMaximal Marginal Relevance (MMR) algorithm for re-ranking the points.
diversitynumber<float> | null[0, 1]Tunable parameter for the MMR algorithm. Determines the balance between diversity and relevance.
A higher value favors diversity (dissimilarity to selected results), while a lower value favors relevance (similarity to the query vector).
Must be in the range [0, 1]. Default value is 0.5.
candidates_limitinteger<uint> | null[0, 16384]The maximum number of candidates to consider for re-ranking.
If not specified, the limit value is used.
{
"diversity": 0,
"candidates_limit": 0
}RecommendQuery
objectrecommendRecommendInputrequired{
"recommend": {
"positive": [
[
0
]
],
"negative": [
[
0
]
],
"strategy": "average_vector"
}
}RecommendInput
objectpositiveArray<VectorInput> | nullLook for vectors closest to the vectors from these points
negativeArray<VectorInput> | nullTry to avoid vectors like the vector from these points
strategyRecommendStrategy | anyHow to use the provided vectors to find the results
{
"positive": [
[
0
]
],
"negative": [
[
0
]
],
"strategy": "average_vector"
}RecommendStrategy
stringHow to use positive and negative examples to find the results, default is average_vector:
average_vector- Average positive and negative vectors and create a single query with the formulaquery = avg_pos + avg_pos - avg_neg. Then performs normal search.best_score- Uses custom search objective. Each candidate is compared against all examples, its score is then chosen from themax(max_pos_score, max_neg_score). If themax_neg_scoreis chosen then it is squared and negated, otherwise it is just themax_pos_score.sum_scores- Uses custom search objective. Compares against all inputs, sums all the scores. Scores against positive vectors are added, against negatives are subtracted.
"average_vector"DiscoverQuery
objectdiscoverDiscoverInputrequired{
"discover": {
"target": [
0
],
"context": {
"positive": [
0
],
"negative": [
0
]
}
}
}DiscoverInput
objecttargetArray<number> | SparseVector | Array<Array<number>> | integer | string | Document | Image | InferenceObjectrequiredcontextContextPair | Array<ContextPair> | anyrequiredSearch space will be constrained by these pairs of vectors
{
"target": [
0
],
"context": {
"positive": [
0
],
"negative": [
0
]
}
}ContextPair
objectpositiveArray<number> | SparseVector | Array<Array<number>> | integer | string | Document | Image | InferenceObjectrequirednegativeArray<number> | SparseVector | Array<Array<number>> | integer | string | Document | Image | InferenceObjectrequired{
"positive": [
0
],
"negative": [
0
]
}ContextQuery
objectcontextContextPair | Array<ContextPair> | anyrequired{
"context": {
"positive": [
0
],
"negative": [
0
]
}
}ContextInput
objectpositiveArray<number> | SparseVector | Array<Array<number>> | integer | string | Document | Image | InferenceObjectrequirednegativeArray<number> | SparseVector | Array<Array<number>> | integer | string | Document | Image | InferenceObjectrequired{
"positive": [
0
],
"negative": [
0
]
}FusionQuery
objectfusionFusionrrfdbsfrequiredFusion algorithm allows to combine results of multiple prefetches.
Available fusion algorithms:
rrf- Reciprocal Rank Fusion (with default parameters) *dbsf- Distribution-Based Score Fusion
{
"fusion": "rrf"
}Fusion
stringFusion algorithm allows to combine results of multiple prefetches.
Available fusion algorithms:
rrf- Reciprocal Rank Fusion (with default parameters) *dbsf- Distribution-Based Score Fusion
"rrf"RrfQuery
objectrrfRrfrequiredParameters for Reciprocal Rank Fusion
{
"rrf": {
"k": null,
"weights": [
0
]
}
}Rrf
objectParameters for Reciprocal Rank Fusion
kinteger<uint> | null>= 1nullK parameter for reciprocal rank fusion
weightsArray<number> | nullWeights for each prefetch source. Higher weight gives more influence on the final ranking. If not specified, all prefetches are weighted equally. The number of weights should match the number of prefetches.
{
"k": null,
"weights": [
0
]
}Expression
objectgeo_distanceGeoDistanceParamsrequireddatetimestringrequireddatetime_keystringrequired0GeoDistance
objectgeo_distanceGeoDistanceParamsrequired{
"geo_distance": {
"origin": {
"lon": 0,
"lat": 0
},
"to": "string"
}
}GeoDistanceParams
objectoriginGeoPointrequiredGeo point payload schema
tostringrequiredPayload field with the destination geo point
{
"origin": {
"lon": 0,
"lat": 0
},
"to": "string"
}MaxExpression
objectLargest of the given expressions. Requires at least one operand.
maxArray<Expression>required{
"max": []
}MinExpression
objectSmallest of the given expressions. Requires at least one operand.
minArray<Expression>required{
"min": []
}DivParams
objectleftExpressionrequiredrightExpressionrequiredby_zero_defaultnumber<float> | null{
"by_zero_default": 0
}DecayParamsExpression
objectxExpressionrequiredtargetExpression | anyThe target value to start decaying from. Defaults to 0.
scalenumber<float> | nullThe scale factor of the decay, in terms of x. Defaults to 1.0. Must be a non-zero positive number.
midpointnumber<float> | nullThe midpoint of the decay. Should be between 0 and 1.Defaults to 0.5. Output will be this value when |x - target| == scale.
{
"scale": 0,
"midpoint": 0
}RelevanceFeedbackQuery
objectrelevance_feedbackRelevanceFeedbackInputrequired{
"relevance_feedback": {
"target": [
0
],
"feedback": [
{
"example": [
0
],
"score": 0
}
],
"strategy": {
"naive": {
"a": 0,
"b": 0,
"c": 0
}
}
}
}RelevanceFeedbackInput
objecttargetArray<number> | SparseVector | Array<Array<number>> | integer | string | Document | Image | InferenceObjectrequiredfeedbackArray<FeedbackItem>requiredstrategyNaiveFeedbackStrategyrequired{
"target": [
0
],
"feedback": [
{
"example": [
0
],
"score": 0
}
],
"strategy": {
"naive": {
"a": 0,
"b": 0,
"c": 0
}
}
}FeedbackItem
objectexampleArray<number> | SparseVector | Array<Array<number>> | integer | string | Document | Image | InferenceObjectrequiredscorenumber<float>required{
"example": [
0
],
"score": 0
}FeedbackStrategy
objectnaiveNaiveFeedbackStrategyParamsrequired{
"naive": {
"a": 0,
"b": 0,
"c": 0
}
}NaiveFeedbackStrategy
objectnaiveNaiveFeedbackStrategyParamsrequired{
"naive": {
"a": 0,
"b": 0,
"c": 0
}
}NaiveFeedbackStrategyParams
objectanumber<float>requiredbnumber<float>>= 0requiredcnumber<float>required{
"a": 0,
"b": 0,
"c": 0
}SearchParams
objectAdditional parameters of the search
hnsw_efinteger<uint> | null>= 1Params relevant to HNSW index Size of the beam in a beam-search. Larger the value - more accurate the result, more time required for search.
exactbooleanfalseSearch without approximation. If set to true, search may run long but with exact results.
quantizationQuantizationSearchParams | anyQuantization params
indexed_onlybooleanfalseIf enabled, the engine will only perform search among indexed or small segments. Using this option prevents slow searches in case of delayed index, but does not guarantee that all uploaded vectors will be included in search results
acornAcornSearchParams | anyACORN search params
idfany | anyWhich population sparse vector IDF statistics are computed over. By default (or with explicit "global") statistics are collection-wide. Only applicable to sparse vectors with the IDF modifier enabled.
{
"hnsw_ef": 1,
"exact": false,
"quantization": {
"ignore": false,
"rescore": true,
"oversampling": 1
},
"indexed_only": false,
"acorn": {
"enable": false,
"max_selectivity": 0
}
}QuantizationSearchParams
objectAdditional parameters of the search
ignorebooleanfalseIf true, quantized vectors are ignored. Default is false.
rescoreboolean | nullIf true, use original vectors to re-score top-k results. Might require more time in case if original vectors are stored on disk. If not set, qdrant decides automatically apply rescoring or not.
oversamplingnumber<double> | null>= 1Oversampling factor for quantization. Default is 1.0.
Defines how many extra vectors should be preselected using quantized index, and then re-scored using original vectors.
For example, if oversampling is 2.4 and limit is 100, then 240 vectors will be preselected using quantized index, and then top-100 will be returned after re-scoring.
{
"ignore": false,
"rescore": true,
"oversampling": 1
}AcornSearchParams
objectACORN-related search parameters
enablebooleanfalseIf true, then ACORN may be used for the HNSW search based on filters selectivity. Improves search recall for searches with multiple low-selectivity payload filters, at cost of performance.
max_selectivitynumber<double> | null[0, 1]Maximum selectivity of filters to enable ACORN.
If estimated filters selectivity is higher than this value, ACORN will not be used. Selectivity is estimated as: estimated number of points satisfying the filters / total number of points.
0.0 for never, 1.0 for always. Default is 0.4.
{
"enable": false,
"max_selectivity": 0
}IdfParams
objectPopulation over which sparse vector IDF statistics are computed for scoring — the IDF corpus.
"global"— collection-wide statistics, same as omitting the parameter. -{ "corpus": <filter> }— document count and per-term document frequencies are computed over the points matching the corpus filter only. The corpus is independent of the retrieval filter and is usually broader than it.
Named IDF scope without a corpus filter.
"global"IdfCorpusParams
objectIDF statistics computed over the points matching a corpus filter.
corpusFilterrequired{}LookupLocation
objectDefines a location to use for looking up the vector. Specifies collection and vector field name.
collectionstringrequiredName of the collection used for lookup
vectorstring | nullnullOptional name of the vector field within the collection. If not provided, the default vector field will be used.
shard_keystring | integer | Array<ShardKey> | ShardKeyWithFallback | anySpecify in which shards to look for the points, if not specified - look in all shards
{
"collection": "string",
"vector": null,
"shard_key": "region_1"
}QueryResponse
objectpointsArray<ScoredPoint>required{
"points": [
{
"id": 42,
"version": 3,
"score": 0.75,
"payload": {
"city": "London",
"color": "green"
},
"vector": [
0.875,
0.140625,
0.897599995136261
],
"shard_key": "region_1",
"order_value": 42
}
]
}QueryGroupsRequest
objectshard_keystring | integer | Array<ShardKey> | ShardKeyWithFallback | anyprefetchPrefetch | Array<Prefetch> | anynullSub-requests to perform first. If present, the query will be performed on the results of the prefetch(es).
queryQueryInterface | anyQuery to perform. If missing without prefetches, returns points ordered by their IDs.
usingstring | nullDefine which vector name to use for querying. If missing, the default vector is used.
filterFilter | anyFilter conditions - return only those points that satisfy the specified conditions.
paramsSearchParams | anySearch params for when there is no prefetch
score_thresholdnumber<float> | nullReturn points with scores better than this threshold.
with_vectorboolean | Array<string> | anyOptions for specifying which vectors to include into the response. Default is false.
with_payloadboolean | Array<string> | PayloadSelectorInclude | PayloadSelectorExclude | anyOptions for specifying which payload to include or not. Default is false.
lookup_fromLookupLocation | anynullThe location to use for IDs lookup, if not specified - use the current collection and the 'using' vector Note: the other collection vectors should have the same vector size as the 'using' vector in the current collection
group_bystringrequiredPayload field to group by, must be a string or number field. If the field contains more than 1 value, all values will be used for grouping. One point can be in multiple groups.
group_sizeinteger<uint> | null>= 1Maximum amount of points to return per group. Default is 3.
limitinteger<uint> | null>= 1Maximum amount of groups to return. Default is 10.
with_lookupstring | WithLookup | anyLook for points in another collection using the group ids
{
"shard_key": "region_1",
"prefetch": null,
"using": "string",
"score_threshold": 0,
"with_vector": true,
"with_payload": true,
"lookup_from": null,
"group_by": "string",
"group_size": 1,
"limit": 1,
"with_lookup": "string"
}WithLookupInterface
objectcollectionstringrequiredName of the collection to use for points lookup
with_payloadboolean | Array<string> | PayloadSelectorInclude | PayloadSelectorExclude | anytrueOptions for specifying which payload to include (or not)
with_vectorsboolean | Array<string> | anynullOptions for specifying which vectors to include (or not)
"string"WithLookup
objectcollectionstringrequiredName of the collection to use for points lookup
with_payloadboolean | Array<string> | PayloadSelectorInclude | PayloadSelectorExclude | anytrueOptions for specifying which payload to include (or not)
with_vectorsboolean | Array<string> | anynullOptions for specifying which vectors to include (or not)
{
"collection": "string",
"with_payload": true,
"with_vectors": null
}SearchMatrixRequest
objectshard_keystring | integer | Array<ShardKey> | ShardKeyWithFallback | anySpecify in which shards to look for the points, if not specified - look in all shards
filterFilter | anyLook only for points which satisfies this conditions
sampleinteger<uint> | null>= 2How many points to select and search within. Default is 10.
limitinteger<uint> | null>= 1How many neighbours per sample to find. Default is 3.
usingstring | nullDefine which vector name to use for querying. If missing, the default vector is used.
{
"shard_key": "region_1",
"sample": 2,
"limit": 1,
"using": "string"
}SearchMatrixOffsetsResponse
objectoffsets_rowArray<integer>requiredRow indices of the matrix
offsets_colArray<integer>requiredColumn indices of the matrix
scoresArray<number>requiredScores associated with matrix coordinates
idsArray<ExtendedPointId>requiredIds of the points in order
{
"offsets_row": [
0
],
"offsets_col": [
0
],
"scores": [
0
],
"ids": [
42
]
}SearchMatrixPairsResponse
objectpairsArray<SearchMatrixPair>requiredList of pairs of points with scores
{
"pairs": [
{
"a": 42,
"b": 42,
"score": 0
}
]
}SearchMatrixPair
objectPair of points (a, b) with score
ainteger | stringrequiredType, used for specifying point ID in user interface
binteger | stringrequiredType, used for specifying point ID in user interface
scorenumber<float>required{
"a": 42,
"b": 42,
"score": 0
}FacetRequest
objectshard_keystring | integer | Array<ShardKey> | ShardKeyWithFallback | anykeystringrequiredPayload key to use for faceting.
limitinteger<uint> | null>= 1Max number of hits to return. Default is 10.
filterFilter | anyFilter conditions - only consider points that satisfy these conditions.
exactboolean | nullWhether to do a more expensive exact count for each of the values in the facet. Default is false.
{
"shard_key": "region_1",
"key": "string",
"limit": 1,
"exact": true
}FacetResponse
objecthitsArray<FacetValueHit>required{
"hits": [
{
"value": "string",
"count": 0
}
]
}FacetValueHit
objectvaluestring | integer | booleanrequiredcountinteger<uint>>= 0required{
"value": "string",
"count": 0
}Usage
objectUsage of the hardware resources, spent to process the request
hardwareHardwareUsage | anyinferenceInferenceUsage | any{
"hardware": {
"cpu": 0,
"payload_io_read": 0,
"payload_io_write": 0,
"payload_index_io_read": 0,
"payload_index_io_write": 0,
"vector_io_read": 0,
"vector_io_write": 0
},
"inference": {
"models": {}
}
}ShardKeysResponse
objectshard_keysArray<ShardKeyDescription> | nullThe existing shard keys. Only available when sharding method is custom
{
"shard_keys": [
{
"key": "region_1"
}
]
}OptimizationsResponse
objectOptimizations progress for the collection
summaryOptimizationsSummaryrequiredrunningArray<Optimization>requiredCurrently running optimizations.
queuedArray<PendingOptimization> | nullAn estimated queue of pending optimizations. Requires ?with=queued.
completedArray<Optimization> | nullCompleted optimizations. Requires ?with=completed. Limited by ?completed_limit=N.
idle_segmentsArray<OptimizationSegmentInfo> | nullSegments that don't require optimization. Requires ?with=idle_segments.
{
"summary": {
"queued_optimizations": 0,
"queued_segments": 0,
"queued_points": 0,
"idle_segments": 0
},
"running": [],
"queued": [
{
"optimizer": "string",
"segments": [
{
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"points_count": 0
}
]
}
],
"completed": [],
"idle_segments": [
{
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"points_count": 0
}
]
}OptimizationsSummary
objectqueued_optimizationsinteger<uint>>= 0requiredNumber of pending optimizations in the queue. Each optimization will take one or more unoptimized segments and produce one optimized segment.
queued_segmentsinteger<uint>>= 0requiredNumber of unoptimized segments in the queue.
queued_pointsinteger<uint>>= 0requiredNumber of points in unoptimized segments in the queue.
idle_segmentsinteger<uint>>= 0requiredNumber of segments that don't require optimization.
{
"queued_optimizations": 0,
"queued_segments": 0,
"queued_points": 0,
"idle_segments": 0
}Optimization
objectuuidstring<uuid>requiredUnique identifier of the optimization process.
After the optimization is complete, a new segment will be created with this UUID.
optimizerstringrequiredName of the optimizer that performed this optimization.
statusstring | object | objectrequiredRepresents the current state of the optimizer being tracked
segmentsArray<OptimizationSegmentInfo>requiredSegments being optimized.
After the optimization is complete, these segments will be replaced by the new optimized segment.
progressProgressTreerequired{
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"optimizer": "string",
"status": "optimizing",
"segments": [
{
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"points_count": 0
}
]
}OptimizationSegmentInfo
objectuuidstring<uuid>requiredUnique identifier of the segment.
points_countinteger<uint>>= 0requiredNumber of non-deleted points in the segment.
{
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"points_count": 0
}ProgressTree
objectnamestringrequiredName of the operation.
started_atstring<date-time> | nullWhen the operation started.
finished_atstring<date-time> | nullWhen the operation finished.
duration_secnumber<double> | nullFor finished operations, how long they took, in seconds.
doneinteger<uint64> | null>= 0Number of completed units of work, if applicable.
totalinteger<uint64> | null>= 0Total number of units of work, if applicable and known.
childrenArray<ProgressTree>Child operations.
{
"name": "string",
"started_at": "2024-01-15T09:30:00Z",
"finished_at": "2024-01-15T09:30:00Z",
"duration_sec": 0,
"done": 0,
"total": 0,
"children": []
}PendingOptimization
objectoptimizerstringrequiredName of the optimizer that scheduled this optimization.
segmentsArray<OptimizationSegmentInfo>requiredSegments that will be optimized.
{
"optimizer": "string",
"segments": [
{
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"points_count": 0
}
]
}DistributedTelemetryData
objectcollectionsobjectrequiredclusterDistributedClusterTelemetry | any{
"collections": {},
"cluster": {
"enabled": true,
"number_of_peers": 0,
"peers": {}
}
}DistributedCollectionTelemetry
objectidstringrequiredCollection name
shardsArray<DistributedShardTelemetry> | nullShards topology
reshardingsArray<ReshardingInfo> | nullOngoing resharding operations
shard_transfersArray<ShardTransferInfo> | nullOngoing shard transfers
{
"id": "string",
"shards": [
{
"id": 0,
"key": "region_1",
"replicas": [
{
"peer_id": 0,
"state": "Active",
"status": "green",
"total_optimized_points": 0,
"vectors_size_bytes": 0,
"payloads_size_bytes": 0,
"num_points": 0,
"num_vectors": 0,
"num_vectors_by_name": {},
"shard_cleaning_status": "started",
"partial_snapshot": {
"ongoing_create_snapshot_requests": 0,
"is_recovering": true,
"recovery_timestamp": 0
}
}
]
}
],
"reshardings": [
{
"direction": "up",
"shard_id": 0,
"peer_id": 0,
"shard_key": "region_1"
}
],
"shard_transfers": [
{
"shard_id": 0,
"to_shard_id": 0,
"from": 0,
"to": 0,
"sync": true,
"method": "stream_records",
"comment": "string"
}
]
}DistributedShardTelemetry
objectidinteger<uint32>>= 0requiredShard ID
keystring | integer | anyOptional shard key
replicasArray<DistributedReplicaTelemetry>requiredReplica information
{
"id": 0,
"key": "region_1",
"replicas": [
{
"peer_id": 0,
"state": "Active",
"status": "green",
"total_optimized_points": 0,
"vectors_size_bytes": 0,
"payloads_size_bytes": 0,
"num_points": 0,
"num_vectors": 0,
"num_vectors_by_name": {},
"shard_cleaning_status": "started",
"partial_snapshot": {
"ongoing_create_snapshot_requests": 0,
"is_recovering": true,
"recovery_timestamp": 0
}
}
]
}DistributedReplicaTelemetry
objectpeer_idinteger<uint64>>= 0requiredPeer ID hosting this replica
stateReplicaStateActiveDeadPartialInitializingListenerPartialSnapshotRecoveryReshardingReshardingScaleDownActiveReadManualRecoveryrequiredState of the single shard within a replica set.
statusShardStatus | anyShard status
total_optimized_pointsinteger<uint> | null>= 0Total optimized points
vectors_size_bytesinteger<uint> | null>= 0Estimated vectors size in bytes
payloads_size_bytesinteger<uint> | null>= 0Estimated payloads size in bytes
num_pointsinteger<uint> | null>= 0Approximate number of points
num_vectorsinteger<uint> | null>= 0Approximate number of vectors
num_vectors_by_nameobject | nullApproximate number of vectors by name
shard_cleaning_statusstring | object | object | anyShard cleaning task status. After a resharding, a cleanup task is performed to remove outdated points from this shard.
partial_snapshotPartialSnapshotTelemetry | anyPartial snapshot telemetry
{
"peer_id": 0,
"state": "Active",
"status": "green",
"total_optimized_points": 0,
"vectors_size_bytes": 0,
"payloads_size_bytes": 0,
"num_points": 0,
"num_vectors": 0,
"num_vectors_by_name": {},
"shard_cleaning_status": "started",
"partial_snapshot": {
"ongoing_create_snapshot_requests": 0,
"is_recovering": true,
"recovery_timestamp": 0
}
}DistributedClusterTelemetry
objectenabledbooleanrequirednumber_of_peersinteger<uint64> | null>= 0peersobjectrequired{
"enabled": true,
"number_of_peers": 0,
"peers": {}
}DistributedPeerInfo
objecturistringrequiredURI of the peer
responsivebooleanrequiredWhether this peer responded for this request
detailsDistributedPeerDetails | anyIf responsive, these details should be available
{
"uri": "string",
"responsive": true,
"details": {
"version": "string",
"role": "Follower",
"is_voter": true,
"term": 0,
"commit": 0,
"num_pending_operations": 0,
"consensus_thread_status": {
"consensus_thread_status": "working",
"last_update": "2024-01-15T09:30:00Z"
}
}
}DistributedPeerDetails
objectversionstringrequiredQdrant version
roleStateRole | anyConsensus role for the peer
is_voterbooleanrequiredWhether it can participate in leader elections
terminteger<uint64>>= 0requiredElection term
commitinteger<uint64>>= 0requiredLatest accepted commit
num_pending_operationsinteger<uint64>>= 0requiredNumber of operations pending for being applied
consensus_thread_statusobject | object | objectrequiredInformation about current consensus thread status
{
"version": "string",
"role": "Follower",
"is_voter": true,
"term": 0,
"commit": 0,
"num_pending_operations": 0,
"consensus_thread_status": {
"consensus_thread_status": "working",
"last_update": "2024-01-15T09:30:00Z"
}
}VectorNameConfig
objectConfiguration for creating a new named vector.
Contains only the immutable properties that define a vector space. Storage type, index, and quantization are determined automatically based on the segment type and can be configured separately later.
Example JSON for a dense vector: json { "dense": { "size": 768, "distance": "Cosine" } }
Example JSON for a sparse vector: json { "sparse": { "modifier": "Idf" } }
denseDenseVectorConfigrequiredConfiguration for creating a new dense named vector.
Only includes properties that define the vector space and cannot be changed after creation. Storage type, index type, and quantization are inferred.
sparseSparseVectorConfigrequiredConfiguration for creating a new sparse named vector.
Only includes properties that define the vector space and cannot be changed after creation.
{
"dense": {
"size": 1,
"distance": "Cosine",
"multivector_config": {
"comparator": "max_sim"
},
"datatype": "float32"
}
}DenseVectorNameConfig
objectWrapper for dense vector creation config.
denseDenseVectorConfigrequiredConfiguration for creating a new dense named vector.
Only includes properties that define the vector space and cannot be changed after creation. Storage type, index type, and quantization are inferred.
{
"dense": {
"size": 1,
"distance": "Cosine",
"multivector_config": {
"comparator": "max_sim"
},
"datatype": "float32"
}
}DenseVectorConfig
objectConfiguration for creating a new dense named vector.
Only includes properties that define the vector space and cannot be changed after creation. Storage type, index type, and quantization are inferred.
sizeinteger<uint>[1, 65536]requiredDimensionality of the vectors
distanceDistanceCosineEuclidDotManhattanrequiredType of internal tags, build from payload Distance function types used to compare vectors
multivector_configMultiVectorConfig | anyConfiguration for multi-vector points (e.g., ColBERT)
datatypeVectorStorageDatatype | anyElement storage type (Float32, Float16, Uint8, Turbo4)
{
"size": 1,
"distance": "Cosine",
"multivector_config": {
"comparator": "max_sim"
},
"datatype": "float32"
}SparseVectorNameConfig
objectWrapper for sparse vector creation config.
sparseSparseVectorConfigrequiredConfiguration for creating a new sparse named vector.
Only includes properties that define the vector space and cannot be changed after creation.
{
"sparse": {
"modifier": "none",
"datatype": "float32"
}
}SparseVectorConfig
objectConfiguration for creating a new sparse named vector.
Only includes properties that define the vector space and cannot be changed after creation.
modifierModifier | anyValue modifier for sparse vectors (e.g., IDF)
datatypeVectorStorageDatatype | anyDatatype used to store weights in the index
{
"modifier": "none",
"datatype": "float32"
}QuotaStatus
objectQuota configuration in effect, and how close each peer is to it.
The configuration is cluster-wide; the utilization is not. usage is the node that served the request, and peers is what every peer that answered reports about itself — memory and disk are node-local, so one peer being under its limit says nothing about the others.
configQuotaConfigrequiredCluster-wide limits on node resources.
An unset limit means the corresponding resource is not capped. Limits are only enforced while enabled is true.
usageQuotaUsagerequiredUtilization of the quota-managed resources on this node alone — memory and disk are node-local, so a peer under its limit says nothing about the rest of the cluster.
A field is null when the platform does not expose the underlying stat.
peersobject | nullUtilization reported by each peer, keyed by peer ID, including the one that served the request.
Only peers that answered are listed: a peer missing from the map could not be reached, which is itself worth seeing. Absent entirely outside distributed mode, where there are no peers to ask.
{
"config": {
"enabled": false,
"max_resident_memory_percent": 1,
"max_disk_usage_percent": 1,
"release_margin_percent": 0
},
"usage": {
"resident_memory_percent": 0,
"disk_usage_percent": 0
},
"peers": {}
}QuotaUsage
objectUtilization of the quota-managed resources on this node alone — memory and disk are node-local, so a peer under its limit says nothing about the rest of the cluster.
A field is null when the platform does not expose the underlying stat.
resident_memory_percentinteger<uint8> | null>= 0Resident memory of this node's process, as a percentage of the memory available to it (cgroup limit if one applies, else total system memory).
disk_usage_percentinteger<uint8> | null>= 0Used space of this node's storage filesystem, as a percentage of its capacity.
{
"resident_memory_percent": 0,
"disk_usage_percent": 0
}PeerQuotaUsage
objectWhat one peer reports about the quota it is enforcing.
exceededbooleanrequiredWhether this peer is at or over one of the enforced limits, and so is currently refusing updates. Always false while the quota is disabled.
resident_memory_percentinteger<uint8> | null>= 0Resident memory of this node's process, as a percentage of the memory available to it (cgroup limit if one applies, else total system memory).
disk_usage_percentinteger<uint8> | null>= 0Used space of this node's storage filesystem, as a percentage of its capacity.
{
"exceeded": true,
"resident_memory_percent": 0,
"disk_usage_percent": 0
}