# 使用Vald进行快速和近似密集向量搜索的完整指南
## 引言
在当今的大规模数据处理中,高效地搜索和检索相似数据是一项重要任务。Vald 是一个高度可扩展的分布式快速近似最近邻(ANN)密集向量搜索引擎,专为处理这种任务而设计。在这篇文章中,我们将探讨如何使用 Vald 数据库进行文档相似性搜索,并提供代码示例来帮助您快速上手。
## 主要内容
### 安装和准备环境
在开始之前,确保您已经设置好运行的 Vald 集群。您可以参考 [安装说明](https://vald.vdaas.org/docs/get-started/) 了解更多信息。使用以下命令安装所需的 Python 包:
```bash
%pip install --upgrade --quiet vald-client-python langchain-community
加载和预处理文档
我们首先需要加载和分割文本文档,以便为它们生成嵌入向量。
from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores import Vald
from langchain_huggingface import HuggingFaceEmbeddings
from langchain_text_splitters import CharacterTextSplitter
# 加载文档
raw_documents = TextLoader("state_of_the_union.txt").load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
documents = text_splitter.split_documents(raw_documents)
使用 HuggingFaceEmbeddings 生成嵌入
embeddings = HuggingFaceEmbeddings()
db = Vald.from_documents(documents, embeddings, host="{AI_URL}", port=8080) # 使用API代理服务提高访问稳定性
相似性搜索
您可以进行基于文本或者向量的相似性搜索:
- 基于文本查询
query = "What did the president say about Ketanji Brown Jackson"
docs = db.similarity_search(query)
print(docs[0].page_content)
- 基于向量查询
embedding_vector = embeddings.embed_query(query)
docs = db.similarity_search_by_vector(embedding_vector)
print(docs[0].page_content)
使用安全连接
在某些环境中,使用安全连接至关重要。以下是一个使用基于 Athenz 认证的 Vald 集群的示例配置:
import grpc
with open("test_root_cacert.crt", "rb") as root:
credentials = grpc.ssl_channel_credentials(root_certificates=root.read())
# 刷新服务使用的权限
with open(".ztoken", "rb") as ztoken:
token = ztoken.read().strip()
metadata = [(b"athenz-role-auth", token)]
db = Vald.from_documents(
documents,
embeddings,
host="{AI_URL}", # 使用API代理服务提高访问稳定性
port=443,
grpc_use_secure=True,
grpc_credentials=credentials,
grpc_metadata=metadata,
)
docs = db.similarity_search(query, grpc_metadata=metadata)
print(docs[0].page_content)
常见问题和解决方案
- 网络访问限制:由于某些地区的网络限制,您可能需要使用 API 代理服务来提高访问稳定性。
- 性能调整:基于硬件配置和数据量调整 Vald 集群的参数以优化性能。
总结和进一步学习资源
Vald 提供了一种高效的方式来处理海量数据的相似性搜索,在构建需要快速响应的搜索应用时具有显著优势。要进一步了解,请参阅以下资源:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---