Merge pull request #565 from qdrant/mjang-collections-curl

Add curl commands to collections page
This commit is contained in:
Mike Jang
2024-02-01 04:32:51 -08:00
committed by GitHub
2 changed files with 253 additions and 10 deletions
@@ -30,8 +30,25 @@ These settings can be changed at any time by a corresponding request.
**When should you create multiple collections?** When you have a limited number of users and you need isolation. This approach is flexible, but it may be more costly, since creating numerous collections may result in resource overhead. Also, you need to ensure that they do not affect each other in any way, including performance-wise.
> Note: If you're running `curl` from the command line, the following commands
assume that you have a running instance of Qdrant on `http://localhost:6333`.
If needed, you can set one up as described in our
[Quickstart](/documentation/quick-start/) guide. For convenience, these commands
specify collections named `test_collection1` through `test_collection4`.
## Create a collection
```bash
curl -X PUT http://localhost:6333/collections/test_collection1 \
-H 'Content-Type: application/json' \
--data-raw '{
"vectors": {
"size": 300,
"distance": "Cosine"
}
}'
```
```http
PUT /collections/{collection_name}
{
@@ -130,7 +147,22 @@ It is possible to initialize a collection from another existing collection.
This might be useful for experimenting quickly with different configurations for the same data set.
Make sure the vectors have the same size and distance function when setting up the vectors configuration in the new collection.
Make sure the vectors have the same `size` and `distance` function when setting up the vectors configuration in the new collection. If you used the previous sample
code, `"size": 300` and `"distance": "Cosine"`.
```bash
curl -X PUT http://localhost:6333/collections/test_collection2 \
-H 'Content-Type: application/json' \
--data-raw '{
"vectors": {
"size": 300,
"distance": "Cosine"
},
"init_from": {
"collection": "test_collection1"
}
}'
```
```http
PUT /collections/{collection_name}
@@ -229,6 +261,23 @@ This feature allows for multiple vector storages per collection.
To distinguish vectors in one record, they should have a unique name defined when creating the collection.
Each named vector in this mode has its distance and size:
```bash
curl -X PUT http://localhost:6333/collections/test_collection3 \
-H 'Content-Type: application/json' \
--data-raw '{
"vectors": {
"image": {
"size": 4,
"distance": "Dot"
},
"text": {
"size": 8,
"distance": "Cosine"
}
}
}'
```
```http
PUT /collections/{collection_name}
{
@@ -368,6 +417,16 @@ Collections can contain sparse vectors as additional [named vectors](#collection
Unlike dense vectors, sparse vectors must be named.
And additionally, sparse vectors and dense vectors must have different names within a collection.
```bash
curl -X PUT http://localhost:6333/collections/test_collection4 \
-H 'Content-Type: application/json' \
--data-raw '{
"sparse_vectors": {
"text": { }
}
}'
```
```http
PUT /collections/{collection_name}
{
@@ -461,8 +520,12 @@ However, there are optional parameters to tune the underlying [sparse vector ind
### Delete collection
```bash
curl -X DELETE http://localhost:6333/collections/test_collection4
```
```http
DELETE /collections/{collection_name}
DELETE http://localhost:6333/collections/test_collection4
```
```python
@@ -495,6 +558,16 @@ As a result, you will not waste extra computation resources on rebuilding the in
The following command enables indexing for segments that have more than 10000 kB of vectors stored:
```bash
curl -X PATCH http://localhost:6333/collections/test_collection1 \
-H 'Content-Type: application/json' \
--data-raw '{
"optimizers_config": {
"indexing_threshold": 10000
}
}'
```
```http
PATCH /collections/{collection_name}
{
@@ -578,6 +651,18 @@ automatically be rebuilt in the background to match updated parameters.
To put vector data on disk for a collection that **does not have** named vectors,
use `""` as name:
```bash
curl -X PATCH http://localhost:6333/collections/test_collection1 \
-H 'Content-Type: application/json' \
--data-raw '{
"vectors": {
"": {
"on_disk": true
}
}
}'
```
```http
PATCH /collections/{collection_name}
{
@@ -585,12 +670,26 @@ PATCH /collections/{collection_name}
"": {
"on_disk": true
}
},
}
}
```
To put vector data on disk for a collection that **does have** named vectors:
Note: To create a vector name, follow the procedure from our [Points](/documentation/concepts/points/#create-vector-name).
```bash
curl -X PATCH http://localhost:6333/collections/test_collection1 \
-H 'Content-Type: application/json' \
--data-raw '{
"vectors": {
"my_vector": {
"on_disk": true
}
}
}'
```
```http
PATCH /collections/{collection_name}
{
@@ -598,13 +697,45 @@ PATCH /collections/{collection_name}
"my_vector": {
"on_disk": true
}
},
}
}
```
In the following example the HNSW index and quantization parameters are updated,
both for the whole collection, and for `my_vector` specifically:
```bash
curl -X PATCH http://localhost:6333/collections/test_collection1 \
-H 'Content-Type: application/json' \
--data-raw '{
"vectors": {
"my_vector": {
"hnsw_config": {
"m": 32,
"ef_construct": 123
},
"quantization_config": {
"product": {
"compression": "x32",
"always_ram": true
}
},
"on_disk": true
}
},
"hnsw_config": {
"ef_construct": 123
},
"quantization_config": {
"scalar": {
"type": "int8",
"quantile": 0.8,
"always_ram": false
}
}
}'
```
```http
PATCH /collections/{collection_name}
{
@@ -789,8 +920,58 @@ client
Qdrant allows determining the configuration parameters of an existing collection to better understand how the points are
distributed and indexed.
```bash
curl -X GET http://localhost:6333/collections/test_collection1 \
-H 'Content-Type: application/json' \
--data-raw '{
"result": {
"status": "green",
"optimizer_status": "ok",
"vectors_count": 1068786,
"indexed_vectors_count": 1024232,
"points_count": 1068786,
"segments_count": 31,
"config": {
"params": {
"vectors": {
"size": 384,
"distance": "Cosine"
},
"shard_number": 1,
"replication_factor": 1,
"write_consistency_factor": 1,
"on_disk_payload": false
},
"hnsw_config": {
"m": 16,
"ef_construct": 100,
"full_scan_threshold": 10000,
"max_indexing_threads": 0
},
"optimizer_config": {
"deleted_threshold": 0.2,
"vacuum_min_vector_number": 1000,
"default_segment_number": 0,
"max_segment_size": null,
"memmap_threshold": null,
"indexing_threshold": 20000,
"flush_interval_sec": 5,
"max_optimization_threads": 1
},
"wal_config": {
"wal_capacity_mb": 32,
"wal_segments_ahead": 0
}
},
"payload_schema": {}
},
"status": "ok",
"time": 0.00010143
}'
```
```http
GET /collections/{collection_name}
GET /collections/test_collection1
{
"result": {
"status": "green",
@@ -916,13 +1097,28 @@ Since all changes of aliases happen atomically, no concurrent requests will be a
### Create alias
```bash
curl -X POST http://localhost:6333/collections/aliases \
-H 'Content-Type: application/json' \
--data-raw '{
"actions": [
{
"create_alias": {
"collection_name": "test_collection1",
"alias_name": "production_collection"
}
}
]
}'
```
```http
POST /collections/aliases
{
"actions": [
{
"create_alias": {
"collection_name": "example_collection",
"collection_name": "test_collection1",
"alias_name": "production_collection"
}
}
@@ -965,6 +1161,21 @@ client.createAliasAsync("production_collection", "example_collection").get();
### Remove alias
```bash
curl -X POST http://localhost:6333/collections/aliases \
-H 'Content-Type: application/json' \
--data-raw '{
"actions": [
{
"delete_alias": {
"collection_name": "test_collection1",
"alias_name": "production_collection"
}
}
]
}'
```
```http
POST /collections/aliases
{
@@ -1013,6 +1224,26 @@ client.deleteAliasAsync("production_collection").get();
Multiple alias actions are performed atomically.
For example, you can switch underlying collection with the following command:
```bash
curl -X POST http://localhost:6333/collections/aliases \
-H 'Content-Type: application/json' \
--data-raw '{
"actions": [
{
"delete_alias": {
"alias_name": "production_collection"
}
},
{
"create_alias": {
"collection_name": "test_collection2",
"alias_name": "production_collection"
}
}
]
}'
```
```http
POST /collections/aliases
{
@@ -1024,7 +1255,7 @@ POST /collections/aliases
},
{
"create_alias": {
"collection_name": "example_collection",
"collection_name": "test_collection2",
"alias_name": "production_collection"
}
}
@@ -1077,8 +1308,12 @@ client.createAliasAsync("production_collection", "example_collection").get();
### List collection aliases
```bash
curl -X GET http://localhost:6333/collections/test_collection2/aliases
```
```http
GET /collections/{collection_name}/aliases
GET /collections/test_collection2/aliases
```
```python
@@ -1117,6 +1352,10 @@ client.listCollectionAliasesAsync("{collection_name}").get();
### List all aliases
```bash
curl -X GET http://localhost:6333/aliases
```
```http
GET /aliases
```
@@ -1157,6 +1396,10 @@ client.listAliasesAsync().get();
### List all collections
```bash
curl -X GET http://localhost:6333/collections
```
```http
GET /collections
```
@@ -1193,4 +1436,4 @@ QdrantClient client =
new QdrantClient(QdrantGrpcClient.newBuilder("localhost", 6334, false).build());
client.listCollectionsAsync().get();
```
```
@@ -520,7 +520,7 @@ In this case, it means that points with the same id will be overwritten when re-
Idempotence property is useful if you use, for example, a message queue that doesn't provide an exactly-ones guarantee.
Even with such a system, Qdrant ensures data consistency.
*Available as of v0.10.0*
[*Available as of v0.10.0*](#create-vector-name)
If the collection was created with multiple vectors, each vector data can be provided using the vector's name: