您可以使用 ClickHouse 进行向量搜索吗?
·2 分钟阅读
了解如何将 ClickHouse 用于向量搜索,包括存储嵌入以及使用余弦相似度等距离函数进行搜索。
ClickHouse 用于向量搜索!
是的,ClickHouse 可以执行向量搜索。
与使用更专业的向量数据库相比,使用 ClickHouse 进行向量搜索的主要优势包括
- 在执行搜索之前,使用 ClickHouse 的过滤和全文搜索功能来优化您的数据集。
- 对您的数据集执行分析。
- 针对您现有数据运行
JOIN
。 - 无需管理另一个数据库并使您的基础设施复杂化。
这是一个关于如何使用 ClickHouse 进行向量搜索的快速教程。
1. 创建嵌入
您的数据(文档、图像或结构化数据)必须转换为嵌入。我们建议使用 OpenAI 嵌入 API 或使用开源 Python 库 SentenceTransformers 创建嵌入。
您可以将嵌入视为代表您数据的大型浮点数数组。请查看 OpenAI 的本指南以了解更多关于嵌入的信息。
2. 存储嵌入
生成嵌入后,您需要将它们存储在 ClickHouse 中。每个嵌入应存储在单独的行中,并且可以包含用于过滤、聚合或分析的元数据。这是一个可以存储带有标题的图像的表的示例
CREATE TABLE images
(
`_file` LowCardinality(String),
`caption` String,
`image_embedding` Array(Float32)
)
ENGINE = MergeTree;
3. 搜索相关嵌入
假设您想在数据集中搜索狗的图片。您可以使用距离函数(如 cosineDistance
)来获取狗图像的嵌入并搜索相关图像
SELECT
_file,
caption,
cosineDistance(
-- An embedding of your "input" dog picture
[0.5736801028251648, 0.2516217529773712, ..., -0.6825592517852783],
image_embedding
) AS score
FROM images
ORDER BY score ASC
LIMIT 10
此查询返回最有可能与您提供的狗图像相关的排名前 10 位的图像的 _file
名称和 caption
。
延伸阅读
要学习关于使用 ClickHouse 进行向量搜索的更深入教程,请参阅