Векторный индекс
Внимание
Поддерживается только для строковых таблиц. Поддержка функциональности для колоночных таблиц находится в разработке.
Внимание
Фукциональность векторных индексов доступна, начиная с версии 25.1.2
.
Для включения векторных индексов необходимо установить значение feature flag enable_vector_index
в true
.
В настоящее время не поддерживается:
- Обновление индекса: модифицировать основную таблицу можно, но существующий индекс не обновится. Нужно построить новый индекс, чтобы учесть изменения. При необходимости, можно атомарно заменить существующий индекс на вновь построенный.
- Построение индекса для векторов c битовым квантованием.
Эти ограничения могут быть устранены в будущих версиях.
Важно
Создание пустой таблицы с векторным индексом в настоящее время не имеет практического смысла, так как модификация данных в таблицах с векторными индексами пока не поддерживается.
Следует использовать команду ALTER TABLE ... ADD INDEX
для добавления векторного индекса в существующую таблицу.
Конструкция INDEX
используется для определения векторного индекса в строчно-ориентированных таблицах:
CREATE TABLE table_name (
...
INDEX <имя_индекса> GLOBAL [SYNC] USING <тип_индекса> ON ( <колонки_индекса> ) COVER ( <покрывающие_колонки> ) WITH ( <параметры_индекса> ),
...
)
Где:
- имя_индекса - уникальное имя индекса для доступа к данным
- SYNC - указывает на синхронную запись данных в индекс. Если не указано - синхронная.
- тип_индекса - тип индекса, в настоящее время поддерживается только
vector_kmeans_tree
- колонки_индекса - список колонок таблицы через запятую, используемых для поиска по индексу (последняя колонка используется как эмбеддинг, остальные - как префиксные колонки)
- покрывающие_колонки - дополнительные колонки таблицы, сохраняемые в индексе для возможности их извлечения без обращения к основной таблице
- параметры_индекса - список параметров в формате ключ-значение:
- общие параметры для всех векторных индексов:
vector_dimension
- размерность вектора эмбеддинга (<= 16384);vector_type
- тип значений вектора (float
,uint8
,int8
,bit
);distance
- функция расстояния (cosine
,manhattan
,euclidean
) илиsimilarity
- функция схожести (inner_product
,cosine
).
- специфичные параметры для
vector_kmeans_tree
:clusters
- количество центроидов для алгоритма k-means (значения > 1000 могут ухудшить производительность);levels
- количество уровней в дереве.
- общие параметры для всех векторных индексов:
Важно
Параметры distance
и similarity
не могут быть указаны одновременно.
Важно
Векторные индексы с 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)
)