📘 **TELUS Agriculture & Consumer Goods** 如何通过 **Haystack Agents** 转变促销交易
由 deepset 维护

集成:Elasticsearch

将 Elasticsearch 数据库与 Haystack 结合使用

作者
deepset

目录

概述

ElasticsearchDocumentStorehaystack-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() 函数。在此步骤中,您可以使用可用的 TextFileToDocumentDocumentSplitter,以及其他可能帮助您从其他资源获取数据的 集成

索引管道

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)