Haystack 不包含内置的文档版本控制功能,但它提供了灵活的模式,可以通过自定义逻辑或与外部系统集成来实现版本控制。该框架专注于文档处理和检索,将存储和版本管理留给底层数据库或外部工具。开发人员可以通过设计文档存储层来跟踪修订、时间戳或文档更新的唯一标识符来处理版本控制。
一种常见的方法是使用具有原生版本控制功能的数据库作为 Haystack 的文档存储。例如,如果您使用带有版本历史记录表的 PostgreSQL,则每次文档更新都可以记录为带有时间戳或版本号的新条目。Haystack 的 Document
对象可以存储元数据字段,如 version_id
或 last_modified
,您可以在发生更改时手动更新这些字段。在通过 pipeline 提取文档时,您可以添加一个预处理步骤来检查现有版本、比较内容,并将新版本附加到存储中。例如,如果 ID 为 doc_123
的文档已更新,您可以将其另存为 doc_123_v2
并在数据库中保留旧版本,可通过元数据过滤器进行查询。
另一种策略是将 Haystack 与外部版本控制系统(如 Git 或云存储服务(例如,AWS S3 对象版本控制))相结合。例如,您可以将原始文档存储在链接到 Haystack pipeline 的 Git 存储库中,使用提交哈希作为版本标记。在检索文档时,pipeline 可以在处理之前从 Git 中提取特定版本。使用 Haystack 的索引 pipeline 时,您还可以实现逻辑来检测源文件中的更改(例如,通过文件哈希)并仅对修改后的文档触发重新索引。但是,这需要版本化存储和 Haystack 的文档存储(例如,Elasticsearch、Weaviate)之间进行仔细的同步,以避免过时的数据。
方法的选择取决于性能需求和复杂性。对于简单的用例,添加版本元数据并通过 version_id
或 timestamp
过滤查询可能就足够了。对于大型系统,与专用版本化数据库或对象存储集成更具可持续性。Haystack 的模块化设计允许开发人员插入这些解决方案,而无需更改核心检索逻辑,从而确保版本控制仍然是存储层的问题,而不是框架的限制。