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