文档API 参考📓 教程🧑‍🍳 食谱🤝 集成💜 Discord🎨 Studio
文档

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}})

相关链接

在我们的 API 参考中查看参数详情