Создание коллекции с разреженными векторами#

Platform V Vector DB (далее - Vector DB) поддерживает разреженные векторы как полноценную функцию.

Разреженные векторы полезны для текстового поиска, где каждое слово представлено отдельной размерностью.

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

В отличие от плотных векторов, разреженным векторам обязательно нужно присваивать имена. Кроме того, разреженные и плотные векторы должны иметь разные названия в пределах одной коллекции.

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

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

  2. Подготовлены данные для создания коллекций с разреженными векторами.

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

  1. Создание коллекции:

    PUT /collections/{collection_name}
    {
        "sparse_vectors": {
            "text": { }
        }
    }
    
    curl -X PUT http://localhost:6333/collections/{collection_name} \
      -H 'Content-Type: application/json' \
      --data-raw '{
        "sparse_vectors": {
            "text": { }
        }
      }'
    
    from qdrant_client import QdrantClient, models
    
    client = QdrantClient(url="http://localhost:6333")
    
    client.create_collection(
        collection_name="{collection_name}",
        vectors_config={},
        sparse_vectors_config={
            "text": models.SparseVectorParams(),
        },
    )
    
    import { QdrantClient } from "@qdrant/js-client-rest";
    
    const client = new QdrantClient({ host: "localhost", port: 6333 });
    
    client.createCollection("{collection_name}", {
      sparse_vectors: {
        text: { },
      },
    });
    
    use qdrant_client::Qdrant;
    use qdrant_client::qdrant::{
        CreateCollectionBuilder, SparseVectorParamsBuilder, SparseVectorsConfigBuilder,
    };
    
    let client = Qdrant::from_url("http://localhost:6334").build()?;
    
    let mut sparse_vector_config = SparseVectorsConfigBuilder::default();
    
    sparse_vector_config.add_named_vector_params("text", SparseVectorParamsBuilder::default());
    
    client
        .create_collection(
            CreateCollectionBuilder::new("{collection_name}")
                .sparse_vectors_config(sparse_vector_config),
        )
        .await?;
    
    import io.qdrant.client.QdrantClient;
    import io.qdrant.client.QdrantGrpcClient;
    import io.qdrant.client.grpc.Collections.CreateCollection;
    import io.qdrant.client.grpc.Collections.SparseVectorConfig;
    import io.qdrant.client.grpc.Collections.SparseVectorParams;
    
    QdrantClient client =
        new QdrantClient(QdrantGrpcClient.newBuilder("localhost", 6334, false).build());
    
    client
        .createCollectionAsync(
            CreateCollection.newBuilder()
                .setCollectionName("{collection_name}")
                .setSparseVectorsConfig(
                    SparseVectorConfig.newBuilder()
                        .putMap("text", SparseVectorParams.getDefaultInstance()))
                .build())
        .get();
    
    using Qdrant.Client;
    using Qdrant.Client.Grpc;
    
    var client = new QdrantClient("localhost", 6334);
    
    await client.CreateCollectionAsync(
      collectionName: "{collection_name}",
      sparseVectorsConfig: ("text", new SparseVectorParams())
    );
    
    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}",
      SparseVectorsConfig: qdrant.NewSparseVectorsConfig(
          map[string]*qdrant.SparseVectorParams{
              "text": {},
          }),
    })
    

    Функция вычисления расстояний для разреженных векторов всегда равна Dot и не нуждается в указании.

    Кроме уникального имени для разреженных векторов нет никаких обязательных параметров конфигурации. Однако существуют дополнительные параметры для настройки лежащего в основе разреженного индексного вектора (подробнее в разделе Индексирование).

    Убедитесь, что разреженным векторам присвоены уникальные имена.

  2. Настройка разреженных векторов:

    • Укажите параметры sparse_vectors в конфигурации коллекции.

    • Проверьте, чтобы имена разреженных и плотных векторов не пересекались.

  3. Вставка данных: добавьте точки с разреженными векторами, используя соответствующие методы API.

  4. Индексация и поиск: настройте разреженный индексный вектор для оптимизации производительности.

Результат#

После выполнения операций появятся возможности:

  • Хранить и обрабатывать разреженные векторы в коллекциях.

  • Эффективно выполнять текстовый поиск с использованием разреженных представлений.

  • Комбинировать плотные и разреженные векторы в одной точке.

  • Настраивать параметры индексации для оптимизации производительности.