由 deepset 维护
集成:Elasticsearch
将 Elasticsearch 数据库与 Haystack 结合使用
目录
概述
ElasticsearchDocumentStore 在 haystack-core-integrations 仓库中维护。它允许您使用 Elasticsearch 作为 Haystack 管道的数据存储。
有关可用方法的详细信息,请访问 API 参考
安装
要本地运行 Elasticsearch 实例,请首先按照 安装 和 启动 指南进行操作。
pip install elasticsearch-haystack
使用
安装完成后,您可以通过初始化来开始在 Haystack 中使用您的 Elasticsearch 数据库
from haystack_integrations.document_stores.elasticsearch import ElasticsearchDocumentStore
document_store = ElasticsearchDocumentStore(hosts = "https://:9200")
将文档写入 ElasticsearchDocumentStore
要将文档写入您的 ElasticsearchDocumentStore,请创建一个包含 DocumentWriter 的索引管道,或使用 write_documents() 函数。在此步骤中,您可以使用可用的 TextFileToDocument 和 DocumentSplitter,以及其他可能帮助您从其他资源获取数据的 集成。
索引管道
from haystack_integrations.document_stores.elasticsearch import ElasticsearchDocumentStore
from haystack import Pipeline
from haystack.components.embedders import SentenceTransformersDocumentEmbedder
from haystack.components.converters import TextFileToDocument
from haystack.components.preprocessors import DocumentSplitter
from haystack.components.writers import DocumentWriter
document_store = ElasticsearchDocumentStore(hosts = "https://:9200")
converter = TextFileToDocument()
splitter = DocumentSplitter()
doc_embedder = SentenceTransformersDocumentEmbedder(model="sentence-transformers/multi-qa-mpnet-base-dot-v1")
writer = DocumentWriter(document_store)
indexing_pipeline = Pipeline()
indexing_pipeline.add_component("converter", converter)
indexing_pipeline.add_component("splitter", splitter)
indexing_pipeline.add_component("doc_embedder", doc_embedder)
indexing_pipeline.add_component("writer", writer)
indexing_pipeline.connect("converter", "splitter")
indexing_pipeline.connect("splitter", "doc_embedder")
indexing_pipeline.connect("doc_embedder", "writer")
indexing_pipeline.run({
"converter":{"sources":["filename.txt"]}
})
在查询管道中使用 Elasticsearch
一旦您的 ElasticsearchDocumentStore 中有了文档,它就可以在任何 Haystack 管道(例如检索增强生成(RAG)管道)的检索步骤中与 ElasticsearchEmbeddingRetriever 一起使用。了解有关 Retrievers 的更多信息,以便在您的 LLM 管道中使用向量搜索。
from haystack_integrations.document_stores.elasticsearch import ElasticsearchDocumentStore
from haystack import Pipeline
from haystack.components.embedders import SentenceTransformersTextEmbedder
from haystack_integrations.components.retrievers.elasticsearch import ElasticsearchEmbeddingRetriever
model = "sentence-transformers/multi-qa-mpnet-base-dot-v1"
document_store = ElasticsearchDocumentStore(hosts = "https://:9200")
retriever = ElasticsearchEmbeddingRetriever(document_store=document_store)
text_embedder = SentenceTransformersTextEmbedder(model=model)
query_pipeline = Pipeline()
query_pipeline.add_component("text_embedder", text_embedder)
query_pipeline.add_component("retriever", retriever)
query_pipeline.connect("text_embedder.embedding", "retriever.query_embedding")
result = query_pipeline.run({"text_embedder": {"text": "historical places in Instanbul"}})
print(result)
