Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

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

此查询会返回与你提供的狗图片最相关的 10 张图像的 _file 名称和 caption

延伸阅读

如需进一步了解如何使用 ClickHouse 进行向量搜索,请参阅:

Navigation