ElasticSearch BM25
Elasticsearch是一个分布式的、RESTful的搜索和分析引擎。它提供了一个分布式、支持多租户的全文搜索引擎,具有HTTP网络界面和无模式的JSON文档。
在信息检索中,Okapi BM25(BM是best matching的缩写)是搜索引擎用于估计文档与给定搜索查询的相关性的排名函数。它基于20世纪70年代和80年代由Stephen E. Robertson、Karen Spärck Jones等人开发的概率检索框架。
实际排名函数的名称是BM25。更完整的名称是Okapi BM25,包括首个使用该函数的Okapi信息检索系统的名称,该系统在20世纪80年代和90年代实施于伦敦的城市大学。BM25及其较新的变体,例如BM25F(可以考虑文档结构和锚文本的BM25版本),代表了在文档检索中使用的类似TF-IDF的检索函数。
本文介绍了如何使用使用ElasticSearch
和BM25
的检索器。
有关BM25的详细信息,请参阅这篇博文。
#!pip install elasticsearch
from langchain.retrievers import ElasticSearchBM25Retriever
创建新的检索器
elasticsearch_url = "http://localhost:9200"
retriever = ElasticSearchBM25Retriever.create(elasticsearch_url, "langchain-index-4")
# 或者,您可以加载现有索引
# import elasticsearch
# elasticsearch_url="http://localhost: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.get_relevant_documents("foo")
result
[Document(page_content='foo', metadata={}),
Document(page_content='foo bar', metadata={})]