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 函数应指示所选数据库或向量存储的所有特定细节。
我们还建议有一个自定义的相应检索器,以充分利用特定的文档存储。
有关更多详细信息,请参阅 创建自定义文档存储 页面。
更新于 大约 1 年前
