要在 Haystack 中执行数据摄取,您需要将原始数据转换为结构化格式并将其加载到文档存储中。 Haystack 通过 Document
对象处理数据,这些对象表示具有元数据的单个内容片段(如文本、PDF 或图像)。该过程通常涉及三个步骤:预处理数据,将其转换为 Document
对象,并将这些对象写入文档存储。例如,如果您有一个文本文件文件夹,您首先需要读取这些文件,将它们分成可管理的块,并创建包含内容和元数据(如文件名或时间戳)的 Document
实例。
首先预处理您的数据以适合您的用例。使用 Haystack 的 PreProcessor
类来清理文本,将长文档拆分为更小的块,或删除不必要的元素。例如,您可以将 10 页的 PDF 分成 10 个单独的 Document
对象,每个对象代表一页。 PreProcessor
允许您定义参数,如 split_length
(每个块的字数)和 split_overlap
(块之间的重叠)。如果您的数据来自多个来源(API、数据库、文件),请使用 Haystack 的 convert_files_to_docs
实用程序处理基于文件的数据,或使用自定义脚本来处理结构化数据。例如,convert_files_to_docs(dir_path="data", split_paragraphs=True)
将目录中的所有文件转换为具有段落级分割的文档。
最后,将处理后的 Document
对象写入 Haystack 支持的文档存储,如 Elasticsearch、FAISS 或 InMemoryDocumentStore。 使用 document_store.write_documents()
方法添加数据。 如果您使用的是检索管道,请确保文档存储与您的检索器兼容(例如,ElasticsearchRetriever 需要 Elasticsearch)。 例如,在初始化 ElasticsearchDocumentStore
后,调用 document_store.write_documents(docs)
来索引数据。 要自动执行摄取,请使用 Haystack 的 Pipeline
类将这些步骤组合成一个管道,添加文件转换器、预处理器和文档写入器等组件。 这种结构化方法可确保您的数据已准备好搜索并针对问题解答或语义搜索等任务进行了优化。