跳到主要內容

ElasticSearch BM25

Elasticsearch 是一個分散式、RESTful 的搜尋和分析引擎。它提供了一個分散式、支援多租戶的全文本搜尋引擎,具有 HTTP Web 介面和無結構描述的 JSON 文件。

在資訊檢索中,Okapi BM25(BM 是最佳匹配的縮寫)是搜尋引擎用來估計文件與給定搜尋查詢相關性的排名函數。它基於 Stephen E. Robertson、Karen Spärck Jones 和其他人於 1970 年代和 1980 年代開發的機率檢索框架。

實際排名函數的名稱是 BM25。更完整的名稱 Okapi BM25 包含了第一個使用它的系統的名稱,即 Okapi 資訊檢索系統,該系統於 1980 年代和 1990 年代在倫敦城市大學實施。BM25 及其較新的變體,例如 BM25F(BM25 的一個版本,可以將文件結構和錨定文字考慮在內),代表了文件中使用的類似 TF-IDF 的檢索函數。

本筆記本展示了如何使用使用 ElasticSearchBM25 的檢索器。

有關 BM25 詳細資訊的更多資訊,請參閱這篇部落格文章

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

建立新的檢索器

elasticsearch_url = "https://127.0.0.1:9200"
retriever = ElasticSearchBM25Retriever.create(elasticsearch_url, "langchain-index-4")
# Alternatively, you can load an existing index
# import elasticsearch
# elasticsearch_url="https://127.0.0.1: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={})]

此頁面是否對您有幫助?