ClickHouse для векторного поиска!
Да, ClickHouse поддерживает векторный поиск.
Основные преимущества использования ClickHouse для векторного поиска по сравнению с более специализированными векторными базами данных:
- Возможность использовать фильтрацию и полнотекстовый поиск ClickHouse, чтобы сузить датасет перед выполнением поиска.
- Возможность выполнять аналитику по вашим датасетам.
- Возможность выполнять
JOINс уже имеющимися данными. - Не нужно управлять еще одной базой данных и усложнять инфраструктуру.
Ниже — краткое руководство по использованию ClickHouse для векторного поиска.
Создание эмбеддингов
Ваши данные (документы, изображения или структурированные данные) нужно преобразовать в эмбеддинги. Мы рекомендуем создавать эмбеддинги с помощью OpenAI Embeddings API или библиотеки Python с открытым исходным кодом SentenceTransformers.
Эмбеддинг можно представить как большой массив чисел с плавающей запятой, который представляет ваши данные. Ознакомьтесь с этим руководством OpenAI, чтобы узнать больше об эмбеддингах.
Хранение эмбеддингов
После того как эмбеддинги сгенерированы, их нужно сохранить в ClickHouse. Каждый эмбеддинг следует хранить в отдельной строке; также можно добавить метаданные для фильтрации, агрегаций или аналитики. Вот пример таблицы для хранения изображений с подписями:
CREATE TABLE images
(
`_file` LowCardinality(String),
`caption` String,
`image_embedding` Array(Float32)
)
ENGINE = MergeTree;Поиск похожих эмбеддингов
Допустим, вы хотите найти в своем датасете изображения собак. Для этого можно использовать функцию расстояния, например cosineDistance: взять эмбеддинг изображения собаки и найти похожие изображения:
SELECT
_file,
caption,
cosineDistance(
-- Эмбеддинг вашего "входного" изображения собаки
[0.5736801028251648, 0.2516217529773712, ..., -0.6825592517852783],
image_embedding
) AS score
FROM images
ORDER BY score ASC
LIMIT 10Этот запрос возвращает имена _file и caption 10 изображений, которые с наибольшей вероятностью соответствуют заданному изображению собаки.
Дополнительные материалы
Более подробное руководство по векторному поиску в ClickHouse см. здесь: