DocumentWriter
使用此组件将文档写入您选择的文档存储中。
| pipeline 中的最常见位置 | 作为索引管道中的最后一个组件 |
| 必需的初始化变量 | "document_store": Document Store 实例 |
| 强制运行变量 | "documents": 文档列表 |
| 输出变量 | "documents_written": 写入的文档数量(整数) |
| API 参考 | Document Writers |
| GitHub 链接 | https://github.com/deepset-ai/haystack/blob/main/haystack/components/writers/document_writer.py |
概述
DocumentWriter 将文档列表写入您选择的文档存储。它通常在索引管道中用作预处理文档和创建其嵌入后的最后一步。
要将此组件与特定文件类型一起使用,请确保在其之前使用正确的转换器。例如,要将DocumentWriter 与 Markdown 文件一起使用,请在索引管道中使用MarkdownToDocument 组件,然后使用DocumentWriter。
DuplicatePolicy
该DuplicatePolicy 是一个类,用于定义处理具有相同 ID 的文档的不同选项,这些文档存在于DocumentStore 中。它有四种可能的值:
- NONE:默认策略,依赖于 Document Store 的设置。
- OVERWRITE:指示如果文档 ID 已存在于
DocumentStore中,则应被新文档覆盖。 - SKIP:如果文档 ID 已存在,则新文档将被跳过,不会添加到
DocumentStore (文档存储). - FAIL:如果文档 ID 已存在于
DocumentStore中,则会引发错误。它可防止添加重复文档。
用法
单独使用
以下是如何将两个文档写入InMemoryDocumentStore:
from haystack import Document
from haystack.document_stores.in_memory import InMemoryDocumentStore
from haystack.components.writers import DocumentWriter
documents = [
Document(content="This is document 1"),
Document(content="This is document 2")
]
document_store = InMemoryDocumentStore()
document_writer = DocumentWriter(document_store = document_store)
document_writer.run(documents=documents)
在 pipeline 中
以下是一个索引管道的示例,该管道首先使用SentenceTransformersDocumentEmbedder 为文档创建嵌入,然后使用DocumentWriter 将文档写入InMemoryDocumentStore:
from haystack.pipeline import Pipeline
from haystack.document_stores.in_memory import InMemoryDocumentStore
from haystack.document_stores.types import DuplicatePolicy
from haystack.components.embedders import SentenceTransformersDocumentEmbedder
from haystack.components.writers import DocumentWriter
documents = [
Document(content="This is document 1"),
Document(content="This is document 2")
]
document_store = InMemoryDocumentStore()
embedder = SentenceTransformersDocumentEmbedder()
document_writer = DocumentWriter(document_store = document_store, policy=DuplicatePolicy.NONE)
indexing_pipeline = Pipeline()
indexing_pipeline.add_component(instance=embedder, name="embedder")
indexing_pipeline.add_component(instance=document_writer, name="writer")
indexing_pipeline.connect("embedder", "writer")
indexing_pipeline.run({"embedder": {"documents": documents}})
更新于 大约 1 年前
