要在 Haystack 中存储搜索结果,您通常使用 DocumentStore 组件,它充当您的文档及其元数据的主要存储系统。当您通过 Haystack 管道(例如 Retriever
)运行搜索查询时,结果将作为 Document
对象的列表返回。这些文档已经存储在您配置的 DocumentStore 中(例如,Elasticsearch、FAISS 或 PostgreSQL),因此无需“重新存储”它们,除非您想存档特定的搜索结果以供以后分析。如果您需要单独保存搜索输出,可以将结果序列化到 Haystack 默认存储之外的文件或数据库中。
例如,在使用管道检索文档后,您可以提取它们的内容和元数据,并将它们保存到 JSON 文件中。这是一个基本代码片段
from haystack import Pipeline
import json
# Assume 'pipeline' is your search pipeline and 'query' is your search term
results = pipeline.run(query=query)
documents = [{"content": doc.content, "meta": doc.meta} for doc in results["documents"]]
with open("search_results.json", "w") as f:
json.dump(documents, f)
这种方法让您可以存档结果以进行审计、调试或进一步处理。您也可以通过将文档字段映射到表列来将它们存储在关系数据库中,或者使用像 Redis 这样的缓存系统来暂时保留频繁访问的结果。
如果您需要将搜索结果保留在 Haystack 的生态系统中,请考虑在您的 DocumentStore 中创建一个专用的 index 来存储查询及其相应的结果。例如,在 Elasticsearch 中,您可以定义一个索引模式,其中包含诸如 query_text
、retrieved_document_ids
和 timestamp
等字段。每次搜索后,使用 Haystack 的 DocumentStore.write_documents()
方法将查询及其结果保存到此索引。此方法对于跟踪搜索历史或训练/评估检索模型非常有用。始终确保您的存储选择与您的用例相符——基于文件的存储用于简单性,数据库用于结构化查询,或 Haystack 原生解决方案用于紧密集成。