Векторный индекс
Внимание
Поддерживается только для строковых таблиц. Поддержка функциональности для колоночных таблиц находится в разработке.
Внимание
Фукциональность векторных индексов доступна, начиная с версии 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)
)