要将 Haystack 与非关系型数据库一起使用,您需要将 Haystack 的文档处理和检索组件与您数据库的数据存储模型连接起来。Haystack 设计用于与 Elasticsearch 或 PostgreSQL 等文档存储配合使用,但它可以通过创建自定义文档存储或使用中间工具与非关系型数据库(例如 MongoDB、Cassandra)集成。核心思想是将您的数据库记录映射到 Haystack 的 Document
对象,这些对象用于索引、查询和检索。这涉及到编写连接器来从数据库中获取数据,将其转换为所需格式,并通过 Haystack 的管道进行处理。
首先,实现一个与您的非关系型数据库交互的自定义 DocumentStore
类。例如,如果您使用 MongoDB,可以创建一个使用 PyMongo 读写文档的 MongoDocumentStore
。此类必须处理诸如保存文档、按 ID 获取文档以及执行基本过滤等操作。接下来,确保您的数据被转换为 Haystack 的 Document
格式,该格式包含诸如 content
、meta
和 embedding
等字段。如果您的数据库存储嵌套或非结构化数据(例如 JSON blob),您需要将其展平或提取相关文本字段。例如,一个包含 text
字段和元数据标签的 MongoDB 文档可以映射到 Haystack 的 Document
对象,其中 content
是文本,而 meta
包含标签。如有必要,使用 Haystack 的 PreProcessor
将长文本分割成更小的块。
一旦您的数据采用 Haystack 格式,构建一个管道将您的自定义 DocumentStore
连接到检索器(例如 BM25Retriever
、EmbeddingRetriever
)和阅读器。例如,您可以创建一个管道,首先使用关键词搜索从 MongoDB 中检索候选文档,然后使用神经网络检索器对其进行重新排序。如果您的非关系型数据库缺乏原生的搜索功能,考虑将数据导出到 Elasticsearch 等受支持工具中的临时索引以用于混合工作流。或者,在您的主数据库旁边使用 Haystack 的 FAISSDocumentStore
进行基于向量的检索。请注意延迟和一致性的权衡,特别是当您的非关系型数据库是分布式或针对高写入吞吐量进行优化时。使用实际查询进行测试,以确保管道能够处理您数据的结构和规模。