Создание коллекции из существующей#

Существует возможность инициализировать коллекцию из уже существующей коллекции.

Это может быть полезно для быстрого экспериментирования с различными конфигурациями для одного набора данных.

Важно

Использование команды init_from может вызвать непредсказуемую нагрузку на кластер. Не рекомендуется использовать команду init_from в средах, чувствительных к производительности.

Предусловия#

  1. Существует уже созданная коллекция {from_collection_name}.

  2. Векторы новой и существующей коллекции имеют одинаковые значения функций size и distance. Если был использован пример кода из раздела Создание коллекции, то "size": 300 и "distance": "Cosine".

  3. Установлен клиентский SDK или присутствует доступ к HTTP/REST API Qdrant.

Последовательность выполнения#

Выполните:

PUT /collections/{collection_name}
{
    "vectors": {
      "size": 100,
      "distance": "Cosine"
    },
    "init_from": {
       "collection": "{from_collection_name}"
    }
}
curl -X PUT http://localhost:6333/collections/{collection_name} \
  -H 'Content-Type: application/json' \
  --data-raw '{
    "vectors": {
      "size": 300,
      "distance": "Cosine"
    },
    "init_from": {
       "collection": {from_collection_name}
    }
  }'
from qdrant_client import QdrantClient, models

client = QdrantClient(url="http://localhost:6333")

client.create_collection(
    collection_name="{collection_name}",
    vectors_config=models.VectorParams(size=100, distance=models.Distance.COSINE),
    init_from=models.InitFrom(collection="{from_collection_name}"),
)
import { QdrantClient } from "@qdrant/js-client-rest";

const client = new QdrantClient({ host: "localhost", port: 6333 });

client.createCollection("{collection_name}", {
  vectors: { size: 100, distance: "Cosine" },
  init_from: { collection: "{from_collection_name}" },
});
use qdrant_client::Qdrant;
use qdrant_client::qdrant::{CreateCollectionBuilder, Distance, VectorParamsBuilder};

let client = Qdrant::from_url("http://localhost:6334").build()?;

client
    .create_collection(
        CreateCollectionBuilder::new("{collection_name}")
            .vectors_config(VectorParamsBuilder::new(100, Distance::Cosine))
            .init_from_collection("{from_collection_name}"),
    )
    .await?;
import io.qdrant.client.QdrantClient;
import io.qdrant.client.QdrantGrpcClient;
import io.qdrant.client.grpc.Collections.CreateCollection;
import io.qdrant.client.grpc.Collections.Distance;
import io.qdrant.client.grpc.Collections.VectorParams;
import io.qdrant.client.grpc.Collections.VectorsConfig;

QdrantClient client =
    new QdrantClient(QdrantGrpcClient.newBuilder("localhost", 6334, false).build());

client
    .createCollectionAsync(
        CreateCollection.newBuilder()
            .setCollectionName("{collection_name}")
            .setVectorsConfig(
                VectorsConfig.newBuilder()
                    .setParams(
                        VectorParams.newBuilder()
                            .setSize(100)
                            .setDistance(Distance.Cosine)
                            .build()))
            .setInitFromCollection("{from_collection_name}")
            .build())
    .get();
using Qdrant.Client;
using Qdrant.Client.Grpc;

var client = new QdrantClient("localhost", 6334);

await client.CreateCollectionAsync(
  collectionName: "{collection_name}",
  vectorsConfig: new VectorParams { Size = 100, Distance = Distance.Cosine },
  initFromCollection: "{from_collection_name}"
);
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.NewVectorsConfig(&qdrant.VectorParams{
      Size:     100,
      Distance: qdrant.Distance_Cosine,
  }),
  InitFromCollection: qdrant.PtrOf("{from_collection_name}"),
})

Внимание

Векторы новой и существующей коллекции должны иметь одинаковые значения функций size и distance. Если был использован пример кода из раздела Создание коллекции, то "size": 300 и "distance": "Cosine"

Результат#

Новая коллекция {collection_name} будет инициализирована данными из существующей коллекции {from_collection_name}. Это позволит экспериментировать с новыми конфигурациями без потери данных.