LlamaIndex 通过结合基于关键词的索引和检索机制来执行全文搜索,旨在高效地定位相关的文本数据。 其核心是使用关键字表索引结构,该结构将从文档中提取的关键字映射到出现这些关键字的节点(文本块)。 当用户提交查询时,LlamaIndex 会将查询分解为关键字,从索引中检索匹配的节点,并根据关键字相关性对结果进行排名。 这种方法平衡了速度和准确性,使其适用于文档搜索或问答系统等应用程序。
该过程从索引创建开始。 在索引期间,LlamaIndex 将输入文档解析为较小的节点(例如,句子或段落),并从每个节点中提取关键字。 例如,包含文本“Python supports object-oriented programming”(Python 支持面向对象编程)的节点可能会生成诸如“Python”、“object-oriented”和“programming”(编程)之类的关键字。 这些关键字存储在查找表中,将每个关键字与包含它的节点相关联。 开发人员可以自定义关键字提取规则,例如忽略常见的停用词(例如,“the”,“and”),或使用 NLP 库来识别特定领域的术语。 此预处理可确保索引针对快速检索进行优化。
在查询执行期间,LlamaIndex 将搜索输入(例如,“How does Python handle OOP?”(Python 如何处理 OOP?))分解为诸如“Python”和“OOP”之类的关键字。 然后,系统从关键字表中提取链接到这些关键字的所有节点。 为了提高相关性,LlamaIndex 可能会应用额外的过滤器,例如检查确切的短语匹配或使用 TF-IDF 评分来优先处理关键字频繁出现的节点。 可选地,它可以与向量存储(例如,FAISS)集成,以将关键字搜索与语义相似性相结合。 例如,混合方法可以首先通过关键字检索节点,然后使用向量嵌入对它们进行重新排序,以呈现与查询在上下文中对齐的结果。 这种灵活性允许开发人员根据自己的需求定制搜索管道,从而平衡精度和计算效率。