Получение информации о коллекции#

Platform V Vector DB (далее - Vector DB) позволяет определить параметры конфигурации существующей коллекции, чтобы лучше понять, как распределены и проиндексированы точки.

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

  1. Коллекция {collection_name} существует.

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

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

  1. Запросите информацию о коллекции:

    GET /collections/{collection_name}
    
    curl -X GET http://localhost:6333/collections/{collection_name}
    
    client.get_collection(collection_name="{collection_name}")
    
    client.getCollection("{collection_name}");
    
    client.collection_info("{collection_name}").await?;
    
    client.getCollectionInfoAsync("{collection_name}").get();
    
    await client.GetCollectionInfoAsync("{collection_name}");
    
    import "context"
    
    client.GetCollectionInfo(context.Background(), "{collection_name}")
    
    Ожидаемый результат
    {
        "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
    }
    
  2. Обработка серого статуса: если статус grey, отправьте запрос на обновление конфигурации оптимизатора для запуска повторной оптимизации.

  3. Анализ показателей: изучите значения vectors_count, indexed_vectors_count и points_count для оценки состояния индексации. В процессе вставки векторов в коллекцию, поле status может стать yellow пока идет процесс оптимизации. Оно станет green, как только все точки успешно обработаны.

Серый статус коллекции#

Возможны следующие цветовые состояния:

  • 🟢 green: коллекция готова;

  • 🟡 yellow: коллекция оптимизируется;

  • grey: коллекция ожидает оптимизации (подробнее в разделе Серый статус коллекции);

  • 🔴 red: произошла ошибка.

Коллекция может иметь серый статус (⚫) или отображать "ожидаются операции оптимизации" в статусе оптимизации. Обычно это вызвано перезапуском экземпляра Vector DB во время проведения операций оптимизации.

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

Например:

PATCH /collections/{collection_name}
{
    "optimizers_config": {}
}
curl -X PATCH http://localhost:6333/collections/{collection_name} \
  -H 'Content-Type: application/json' \
  --data-raw '{
    "optimizers_config": {}
  }'
client.update_collection(
    collection_name="{collection_name}",
    optimizer_config=models.OptimizersConfigDiff(),
)
client.updateCollection("{collection_name}", {
  optimizers_config: {},
});
use qdrant_client::qdrant::{OptimizersConfigDiffBuilder, UpdateCollectionBuilder};

client
    .update_collection(
        UpdateCollectionBuilder::new("{collection_name}")
            .optimizers_config(OptimizersConfigDiffBuilder::default()),
    )
    .await?;
import io.qdrant.client.grpc.Collections.OptimizersConfigDiff;
import io.qdrant.client.grpc.Collections.UpdateCollection;

client.updateCollectionAsync(
    UpdateCollection.newBuilder()
        .setCollectionName("{collection_name}")
        .setOptimizersConfig(
            OptimizersConfigDiff.getDefaultInstance())
        .build());
using Qdrant.Client;
using Qdrant.Client.Grpc;

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

await client.UpdateCollectionAsync(
  collectionName: "{collection_name}",
  optimizersConfig: new OptimizersConfigDiff { }
);
import (
  "context"

  "github.com/qdrant/go-client/qdrant"
)

client, err := qdrant.NewClient(&qdrant.Config{
  Host: "localhost",
  Port: 6334,
})

client.UpdateCollection(context.Background(), &qdrant.UpdateCollection{
  CollectionName:   "{collection_name}",
  OptimizersConfig: &qdrant.OptimizersConfigDiff{},
})

Приблизительное количество точек и векторов#

Vector DB обладает показателями подсчета:

  • points_count - общее количество объектов (векторов и их полезных нагрузок), хранящихся в коллекции;

  • vectors_count - общее количество векторов в коллекции (полезно, когда используется несколько векторов на точку);

  • indexed_vectors_count - общее количество векторов, хранящихся в индексе HNSW или разреженном индексе. Vector DB не сохраняет все векторы в индексе, а только те, для которых может быть создан сегмент индекса при заданной конфигурации.

Приведенные выше показатели являются приблизительными и не должны рассматриваться как точные. В зависимости от того, как используется Vector DB, они могут отличаться от ожидаемых.

Данные показатели представляют собой счетчики точек и векторов во внутреннем хранилище. Внутренне Vector DB временно дублирует точки в процессе автоматических оптимизаций. Он может некоторое время удерживать измененные или удаленные точки, а также задерживать индексацию новых точек ради оптимизации.

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

Внимание

Показатели не отражают точное количество точек или векторов, которые были вставлены, и не показывают точное количество различных точек или векторов, доступных для запроса. Подробная информация о подсчете точек представлена в разделе Управление точками.

Индексирование векторов в HNSW#

В некоторых ситуациях значение indexed_vectors_count может быть ниже, чем vectors_count. Такое поведение предусмотрено намеренно и зависит от настроек оптимизатора (подробнее в разделе Управление оптимизаторами). Новый сегмент индекса создается, если объем невзвешенных векторов превышает значение indexing_threshold(в килобайтах). Если коллекция очень мала или размерность векторов низкая, сегмент HNSW может не создаться и indexed_vectors_count будет равно 0.

Можно уменьшить indexing_threshold для существующей коллекции с помощью обновления параметров коллекции, Подробное описание процесса представлено в разделе Обновление параметров коллекции.

Результат#

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

  • Получать полную информацию о конфигурации и состоянии коллекции.

  • Определять статус готовности коллекции (green, yellow, grey, red).

  • Выполнять повторную оптимизацию коллекции в случае серого статуса.

  • Анализировать показатели хранения и индексации векторов.