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

Document Store (文档存储)

您可以将文档存储视为一个数据库,它存储您的数据并在查询时将其提供给检索器。了解如何在管道中使用文档存储或如何创建自己的文档存储。

文档存储是一个存储文档的对象。在 Haystack 中,文档存储与组件不同,因为它没有run() 方法。您可以将其视为数据库的接口——您将信息放入其中,或者您可以从中查找信息。这意味着文档存储不是管道的一部分,而是管道组件可以访问和交互的工具。

👍

与检索器协同工作

在 Haystack 中使用文档存储最常见的方法是通过检索器获取文档。文档存储通常会有相应的检索器来充分利用特定技术。有关更多信息,请参阅我们的 检索器 文档。

📘

如何选择文档存储?

要了解不同类型的文档存储及其优缺点,请访问 选择文档存储 页面。

文档存储协议

Haystack 中的文档存储被设计为使用以下方法作为其协议的一部分:

  • count_documents 返回给定存储中存储的文档数量,以整数形式表示。
  • filter_documents 返回与提供的过滤器匹配的文档列表。
  • write_documents 将文档写入或覆盖到给定的存储中,并返回写入的文档数量,以整数形式表示。
  • delete_documents 删除给定document_ids 的所有文档。从文档存储中删除。

初始化

要在管道中使用文档存储,您必须先初始化它。

有关左侧导航面板中“文档存储”部分中每个文档存储的安装和初始化详细信息,请参阅。

处理文档

在将您的数据及其元数据和文档 ID 写入文档存储之前,请先将其转换为 Document 对象。

ID 字段是必需的,因此如果您不选择特定的 ID,Haystack 将尽力根据文档的信息生成一个唯一的 ID 并自动分配。但是,由于 Haystack 使用文档的内容来创建 ID,因此两个相同的文档可能会具有相同的 ID。在更新文档时请记住这一点,因为 ID 不会自动更新。

document_store = ChromaDocumentStore()
documents = [
    Document(
      'meta'={'name': DOCUMENT_NAME, ...}
			'id'="document_unique_id",
			'content'="this is content"
  	),
  	...
]
document_store.write_documents(documents)

要将文档写入InMemoryDocumentStore,只需调用.write_documents() 函数。

document_store.write_documents([
    Document(content="My name is Jean and I live in Paris."), 
    Document(content="My name is Mark and I live in Berlin."), 
    Document(content="My name is Giorgio and I live in Rome.")
])

📘

DocumentWriter

请参阅DocumentWriter 组件 文档,以在管道中将文档写入文档存储。

DuplicatePolicy

DuplicatePolicy 是一个类,用于定义在DocumentStore 中处理具有相同 ID 的文档的各种选项。它有三个可能的值:

  • OVERWRITE:表示如果文档存储中已存在具有相同 ID 的文档,则应使用新文档将其覆盖。DocumentStore
  • SKIP:如果具有相同 ID 的文档已存在,则将跳过新文档,不会将其添加到DocumentStore (文档存储).
  • FAIL:如果文档存储中已存在具有相同 ID 的文档,则引发错误。DocumentStore。它可防止添加重复的文档。

以下是如何应用策略来跳过现有文档的示例。

from haystack.document_stores.in_memory import InMemoryDocumentStore
from haystack.components.writers import DocumentWriter
from haystack.document_stores.types import DuplicatePolicy

document_store = InMemoryDocumentStore()
document_writer = DocumentWriter(document_store = document_store, policy=DuplicatePolicy.SKIP)

自定义文档存储

所有自定义文档存储都必须实现 协议,该协议包含四个必需的方法:count_documents,filter_documents, write_documents,以及delete_documents.

init 函数应指示所选数据库或向量存储的所有特定细节。

我们还建议有一个自定义的相应检索器,以充分利用特定的文档存储。

有关更多详细信息,请参阅 创建自定义文档存储 页面。