Haystack 通过将外部数据源转换为结构化文档并将其存储在搜索优化的数据库中,从而与外部数据源集成。该过程包括三个主要步骤:数据提取、预处理和摄取到文档存储中。对于数据库,您需要查询表或集合以检索记录,而像 PDF 或 CSV 这样的文件需要解析工具来提取文本。 Haystack 提供了内置组件(例如,SQLDatabase
, FileTypeRouter
)来处理这些任务,确保将原始数据转换为具有文本内容和元数据的 Document
对象,以便稍后检索。
例如,要使用 SQL 数据库,您可以通过 SQLAlchemy 连接,运行查询,并将结果映射到 Haystack Document
对象。每一行都可以成为一个文档,列存储为元数据(例如,author
或 date
)。对于文件,管道可以将 PDF 路由到 PDFToTextConverter
,使用 PreProcessor
将文本拆分为块,并添加诸如文件名之类的元数据。 CSV 数据可以使用 pandas 加载,然后逐行转换为文档。这些步骤确保非结构化或半结构化数据在 Haystack 的文档存储(例如,Elasticsearch、Weaviate)中变得可搜索。
一旦数据被摄取,您就可以构建用于诸如问答之类的任务的管道。一个典型的管道包括一个检索器(例如,用于关键字搜索的 BM25Retriever
)和一个阅读器(例如,用于答案提取的 TransformersReader
)。为了保持数据的新鲜度,请实现增量更新:安排定期 SQL 查询以获取新行,或使用文件监视器来重新处理更新的文档。 Haystack 的灵活性使您可以混合数据源 - 例如,将数据库内容与爬取的网页相结合 - 同时保持统一的搜索界面。 这种方法避免了供应商锁定,并适应大多数数据生态系统。