跳至主要内容

ClickHouse 能用于向量搜索吗?

·阅读时间:2分钟

是的,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;

假设您想在数据集中搜索狗的图片。您可以使用像 `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 进行向量搜索的更深入的教程,请参阅