本文属于 RAG 工程框架中的「2 索引与召回」环节,聚焦「Boolean Retrieval」方法。可先阅读 RAG-00.方法概述 再进入本篇。
原理
基于布尔表达式进行规则检索,先过滤语料,再交给语义检。重排。
1 | flowchart TD |
优势与局限
- 优势:约束强、可控性极高、时延低。
- 局限:对语义变体不敏感;表达式维护成本会随业务增长。
资源与时延
- 资源:低。
- 时延:极低,适合高并发预筛。
- 维护成本:规则体系需要持续治理。
应用场景
- 合规风控、权限过滤、时间/地域精确筛选。
- 作为 Hybrid 检索前置“硬过滤器”。
统一合成数据示例
输入数据片段
1 | { |
中间结果(布尔过滤候选)
1 | [ |
最终生成示例(含引用)
1 | { |
原始发表与工程实现
- 代表性原始发表:Boolean Retrieval (Salton 体系)。
- 核心解决问题:解决硬约束过滤与合规检索。
- 成熟实现工具:Elasticsearch/OpenSearch DSL。
详细原理拆解
- 执行布尔表达式 (A AND B) NOT C 作为硬过滤,保证可控性与合规性。
- 典型实现可拆为:输入预处理 -> 方法核心计算 -> 候选/证据构建 -> 生成与引用。
- 工程调优重点:质量(准确率/引用率)与成本(时延/token)的联合优化。
1 | flowchart LR |
工程落地扩展示例
伪代码
1 | def boolean_then_semantic(query, dsl: str, index): |
参数示例
1 | filter_fields: [region, year, policy_version, visibility] |
常见失败案例
- 失败模式 1:元数据标注滞后,过滤过严把正确文档挡在网外。
- 失败模式 2:用户口语无「上海」二字,纯布尔召回为空,需 NL→DSL 或 fallback。
- 失败模式 3:OR 过多导致子集仍巨大,布尔失去预筛意义。
Demo 数据带入计算示例
1 | 表达式 region=上海 AND year=2026 AND topic=差旅:D10 全满足 -> 进入后续向量排序; |