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

Векторный индекс в строковых таблицах создаётся с помощью того же синтаксиса, что и вторичные индексы, при указании 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 - размерность вектора эмбеддинга (значение от 1 до 16384);
    • vector_type - тип значений вектора (float, uint8 или int8);
    • distance - функция расстояния (cosine, manhattan или euclidean), взаимосключающий с similarity;
    • similarity - функция схожести (inner_product или cosine), взаимосключающий с distance;
  • специфичные параметры для vector_kmeans_tree (см. документацию):
    • clusters - количество центроидов для алгоритма k-means (значение от 2 до 2048);
    • levels - количество уровней в дереве (значение от 1 до 16);
    • общее количество узлов в дереве, рассчитываемое как clusters в степени levels, должно быть не более чем 1073741824;
    • произведение vector_dimension на clusters должно быть не более чем 4194304.

Важно

При накоплении значительного объёма изменений в таблицах с векторным индексом полнота или производительность поиска может ухудшиться. Подробности смотрите в разделе Обновление векторных индексов.

Важно

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

Пример

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)
)
Предыдущая
Следующая