在 Haystack 中处理文档元数据涉及到管理附加到文档的额外信息,例如标题、作者、日期或自定义标签。 在 Haystack 中,元数据作为键值对存储在 Document
对象的 meta
属性中。 这允许开发人员将结构化数据与非结构化文本内容相关联,这可用于过滤、增强搜索相关性或组织结果。 例如,文档可以包含诸如 {"author": "Jane Doe", "category": "research", "publish_date": "2023-05-01"}
之类的元数据,以启用按作者或类别过滤的查询。
在使用元数据时,第一步是在摄取期间将其附加到文档。 您可以创建一个包含内容和元数据的 Document
对象,然后将其存储在与 Haystack 兼容的文档存储中,例如 Elasticsearch 或 Weaviate。 例如,Document(content="A study on AI...", meta={"source": "arxiv.org", "year": 2022})
创建一个包含文本内容和来源/年份元数据的文档。 文档存储自动索引元数据字段,使其可查询。 但是,某些存储需要显式字段映射。 例如,Elasticsearch 需要预定义的元数据字段映射,以确保正确的数据类型(例如,日期与文本),而 Weaviate 可以更灵活地处理动态类型。 开发人员应验证其文档存储的要求,以避免索引问题。
当在检索管道中使用时,元数据会变得强大。 例如,您可以使用 FilterRetriever
来提取 meta["year"] >= 2020
的文档,或者使用 Elasticsearch 的查询 DSL 将关键字搜索与元数据过滤器结合使用。 在管道中,元数据还可以影响排名——例如,提升来自特定来源的结果。 这是一个使用带有 ElasticsearchRetriever 的元数据过滤的代码片段
retriever = ElasticsearchRetriever(document_store)
results = retriever.retrieve(
query="machine learning",
filters={"year": 2023, "source": "arxiv.org"}
)
这会检索包含 2023 年在 arXiv 上发布的“机器学习”的文档。 元数据也可以传递到后续的管道组件,例如在生成式 QA 步骤中在提示中使用作者信息。 始终在摄取期间验证元数据一致性,以确保可靠的过滤并避免查询结果中出现意外的差距。