跳到主要内容
Open In ColabOpen on GitHub

ElasticSearch BM25

Elasticsearch 是一个分布式、RESTful 的搜索和分析引擎。它提供了一个分布式、多租户的全文搜索引擎,具有 HTTP Web 界面和无模式 JSON 文档。

在信息检索领域,Okapi BM25 (BM 是 best matching 的缩写)是搜索引擎用来评估文档与给定搜索查询相关性的排序函数。它基于 Stephen E. Robertson、Karen Spärck Jones 等人在 20 世纪 70 年代和 80 年代开发的概率检索框架。

实际的排序函数名称是 BM25。其全称 Okapi BM25 包含了第一个使用它的系统名称,即 20 世纪 80 年代和 90 年代在伦敦城市大学实现的 Okapi 信息检索系统。BM25 及其较新的变体,例如 BM25F(BM25 的一个版本,可以考虑文档结构和锚文本),代表了文档检索中使用的类似 TF-IDF 的检索函数。

本笔记本展示了如何使用一个结合了 ElasticSearchBM25 的检索器。

有关 BM25 更多详细信息,请参阅 这篇博客文章

%pip install --upgrade --quiet  elasticsearch
from langchain_community.retrievers import (
ElasticSearchBM25Retriever,
)

创建新检索器

elasticsearch_url = "https://:9200"
retriever = ElasticSearchBM25Retriever.create(elasticsearch_url, "langchain-index-4")
# Alternatively, you can load an existing index
# import elasticsearch
# elasticsearch_url="https://:9200"
# retriever = ElasticSearchBM25Retriever(elasticsearch.Elasticsearch(elasticsearch_url), "langchain-index")

添加文本(如果需要)

我们可以选择性地将文本添加到检索器中(如果它们尚未存在)。

retriever.add_texts(["foo", "bar", "world", "hello", "foo bar"])
['cbd4cb47-8d9f-4f34-b80e-ea871bc49856',
'f3bd2e24-76d1-4f9b-826b-ec4c0e8c7365',
'8631bfc8-7c12-48ee-ab56-8ad5f373676e',
'8be8374c-3253-4d87-928d-d73550a2ecf0',
'd79f457b-2842-4eab-ae10-77aa420b53d7']

使用检索器

我们现在可以使用检索器了!

result = retriever.invoke("foo")
result
[Document(page_content='foo', metadata={}),
Document(page_content='foo bar', metadata={})]