Создание коллекции с несколькими векторами#
Возможно наличие нескольких векторов на запись. Данная особенность позволяет хранить несколько хранилищ векторов в рамках одной коллекции. Для различия векторов в одной записи им нужно задать уникальное имя при создании коллекции. Каждый именованный вектор в этом режиме имеет свое собственное расстояние и размер.
Предусловия#
Присутствует поддержка нескольких векторов в одной точке.
Указаны уникальные имена для каждого вектора.
Установлен клиентский SDK или присутствует доступ к HTTP/REST API Qdrant.
Последовательность выполнения#
Выполните:
PUT /collections/{collection_name}
{
"vectors": {
"image": {
"size": 4,
"distance": "Dot"
},
"text": {
"size": 8,
"distance": "Cosine"
}
}
}
curl -X PUT http://localhost:6333/collections/{collection_name} \
-H 'Content-Type: application/json' \
--data-raw '{
"vectors": {
"image": {
"size": 4,
"distance": "Dot"
},
"text": {
"size": 8,
"distance": "Cosine"
}
}
}'
from qdrant_client import QdrantClient, models
client = QdrantClient(url="http://localhost:6333")
client.create_collection(
collection_name="{collection_name}",
vectors_config={
"image": models.VectorParams(size=4, distance=models.Distance.DOT),
"text": models.VectorParams(size=8, distance=models.Distance.COSINE),
},
)
import { QdrantClient } from "@qdrant/js-client-rest";
const client = new QdrantClient({ host: "localhost", port: 6333 });
client.createCollection("{collection_name}", {
vectors: {
image: { size: 4, distance: "Dot" },
text: { size: 8, distance: "Cosine" },
},
});
use qdrant_client::Qdrant;
use qdrant_client::qdrant::{
CreateCollectionBuilder, Distance, VectorParamsBuilder, VectorsConfigBuilder,
};
let client = Qdrant::from_url("http://localhost:6334").build()?;
let mut vectors_config = VectorsConfigBuilder::default();
vectors_config
.add_named_vector_params("image", VectorParamsBuilder::new(4, Distance::Dot).build());
vectors_config.add_named_vector_params(
"text",
VectorParamsBuilder::new(8, Distance::Cosine).build(),
);
client
.create_collection(
CreateCollectionBuilder::new("{collection_name}").vectors_config(vectors_config),
)
.await?;
import java.util.Map;
import io.qdrant.client.QdrantClient;
import io.qdrant.client.QdrantGrpcClient;
import io.qdrant.client.grpc.Collections.Distance;
import io.qdrant.client.grpc.Collections.VectorParams;
QdrantClient client =
new QdrantClient(QdrantGrpcClient.newBuilder("localhost", 6334, false).build());
client
.createCollectionAsync(
"{collection_name}",
Map.of(
"image", VectorParams.newBuilder().setSize(4).setDistance(Distance.Dot).build(),
"text",
VectorParams.newBuilder().setSize(8).setDistance(Distance.Cosine).build()))
.get();
using Qdrant.Client;
using Qdrant.Client.Grpc;
var client = new QdrantClient("localhost", 6334);
await client.CreateCollectionAsync(
collectionName: "{collection_name}",
vectorsConfig: new VectorParamsMap
{
Map =
{
["image"] = new VectorParams { Size = 4, Distance = Distance.Dot },
["text"] = new VectorParams { Size = 8, Distance = Distance.Cosine },
}
}
);
import (
"context"
"github.com/qdrant/go-client/qdrant"
)
client, err := qdrant.NewClient(&qdrant.Config{
Host: "localhost",
Port: 6334,
})
client.CreateCollection(context.Background(), &qdrant.CreateCollection{
CollectionName: "{collection_name}",
VectorsConfig: qdrant.NewVectorsConfigMap(
map[string]*qdrant.VectorParams{
"image": {
Size: 4,
Distance: qdrant.Distance_Dot,
},
"text": {
Size: 8,
Distance: qdrant.Distance_Cosine,
},
}),
})
В редких случаях возможно создание коллекции вообще без какого-либо хранилища векторов.
Для каждого именованного вектора можно дополнительно указать параметр индексирования hnsw_config (подробнее рассмотрено в разделе Индексирование) или квантования quantization_config (подробнее рассмотрено в разделе Квантование), чтобы отклониться от конфигурации коллекции. Это может быть полезно для тонкой настройки производительности поиска на уровне отдельных векторов.
Все векторы находятся в оперативной памяти для очень быстрого доступа. На уровне отдельного вектора можно установить параметр on_disk равным true, чтобы постоянно сохранять все векторы на диске. Это активирует использование хранилища Memmaps, что удобно для загрузки больших объемов данных. Подробнее о хранилище представлено в разделе Настройка хранилища документа Руководство администрирования.
Результат#
Коллекция будет содержать два именованных вектора:
imageс размером4и метрикойDot.textс размером8и метрикой Cosine`.
Это позволит хранить разнородные данные в одной точке.