Векторный индекс

Внимание

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

Внимание

Фукциональность векторных индексов доступна, начиная с версии 25.1.2.
Для включения векторных индексов необходимо установить значение feature flag enable_vector_index в true.

В настоящее время не поддерживается:

  • Обновление индекса: модифицировать основную таблицу можно, но существующий индекс не обновится. Нужно построить новый индекс, чтобы учесть изменения. При необходимости, можно атомарно заменить существующий индекс на вновь построенный.
  • Построение индекса для векторов c битовым квантованием.

Эти ограничения могут быть устранены в будущих версиях.

Важно

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

Следует использовать команду ALTER TABLE ... ADD INDEX для добавления векторного индекса в существующую таблицу.

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

CREATE TABLE `<table_name>` (
    ...
    INDEX `<index_name>`
        GLOBAL
        [SYNC]
        USING vector_kmeans_tree
        ON ( <index_columns> )
        [COVER ( <cover_columns> )]
        [WITH ( <parameter_name> = <parameter_value>[, ...])]
    [,   ...]
)

Где:

  • <index_name> - уникальное имя индекса для доступа к данным
  • SYNC - указывает на синхронную запись данных в индекс. Это единственная доступная на данный момент опция, явно указывать не обязательно.
  • <index_columns> - список колонок таблицы через запятую, используемых для поиска по индексу (последняя колонка используется как эмбеддинг, остальные - как фильтрующие колонки)
  • <cover_columns> - список дополнительных колонок создаваемой таблицы, которые будут сохранены в индексе для возможности их извлечения без обращения к основной таблице
  • <parameter_name> и <parameter_value> - список параметров в формате ключ-значение:
  • общие параметры для всех векторных индексов:
    • vector_dimension - размерность вектора эмбеддинга (16384 или меньше);
    • vector_type - тип значений вектора (float, uint8, int8 или bit);
    • distance - функция расстояния (cosine, manhattan или euclidean), взаимосключающий с similarity;
    • similarity - функция схожести (inner_product или cosine), взаимосключающий с distance;
  • специфичные параметры для vector_kmeans_tree (см. Векторный индекс типа `vector_kmeans_tree` {#kmeans-tree-type}):
    • clusters - количество центроидов для алгоритма k-means (значения более 1000 могут ухудшить производительность);
    • levels - количество уровней в дереве;

Важно

Векторные индексы с vector_type=bit в настоящее время не поддерживаются.

Пример

CREATE TABLE user_articles (
    article_id Uint64,
    user String,
    title String,
    text String,
    embedding String,
    INDEX emb_cosine_idx GLOBAL SYNC USING vector_kmeans_tree
    ON (user, embedding) COVER (title, text)
    WITH (
        distance="cosine",
        vector_type="float",
        vector_dimension=512,
        clusters=128,
        levels=2
    ),
    PRIMARY KEY (article_id)
)
Предыдущая
Следующая