检索技术
一、检索系统的第一性原理
1.1 检索的本质问题
检索的本质:
在有限时间与资源约束下,从海量候选集合中,找到**足够好(Good Enough)**的 TopK 结果。
由此天然产生三大不可消除的矛盾:
- **搜索空间巨大**(数据规模持续增长)
- **计算资源有限**(CPU / IO / 内存 / 网络)
- **精确性与性能不可兼得**
👉 一切检索技术,都是在这三者之间做权衡。
1.2 检索系统的统一抽象模型
所有检索系统,都可以被抽象为三段式结构:
检索系统 = 搜索空间裁剪 × 候选生成 × 结果排序| 阶段 | 核心目标 | 关键问题 |
|---|---|---|
| 搜索空间裁剪 | 快速缩小候选范围 | 怎么“尽早排除不可能”? |
| 候选生成 | 召回可能相关对象 | 怎么“不漏掉好结果”? |
| 结果排序 | 选出最优 TopK | 怎么“定义相关性”? |
后文所有技术,都会被映射到这一模型中。
二、搜索空间裁剪:减少问题规模
第一性原则:先排除,再计算
2.1 基础数据结构裁剪
| 技术 | 裁剪思想 |
|---|---|
| 数组 / 链表 | 顺序扫描(无裁剪) |
| 树(B+树) | 有序空间二分 |
| 哈希 | 等值映射 |
| 跳表 | 多层有序跳跃 |
本质:利用数据分布的结构性,减少比较次数。
2.2 状态型裁剪结构
| 技术 | 本质作用 |
|---|---|
| 位图 | 用空间换时间的集合表示 |
| 布隆过滤器 | 高概率否定(False Positive 可接受) |
👉 核心思想:
“快速否定”比“精确肯定”更重要
2.3 空间裁剪(地理与多维空间)
GeoHash
- 将连续空间 → 离散字符串
- 将多维空间 → 一维有序空间
本质:
空间映射为前缀可比较的有序编码
四叉树 / 前缀树
- 层级化空间扩张
- 由近及远、由细到粗
三、候选生成:召回“可能相关”的对象
候选生成允许不精确,但不允许漏掉“好结果”
3.1 关键词候选生成:倒排索引
倒排索引的本质
从“文档为中心”转为“词项为中心”
结构抽象:
- Term Dictionary:词 → 倒排列表的映射
- Posting List:词 → 文档集合
倒排索引的工程加速思想
| 技术 | 解决的问题 |
|---|---|
| 跳表 | 有序集合快速跳过 |
| 哈希 | 大小集合交集 |
| 位图 / Roaring Bitmap | 大规模集合运算 |
本质:
集合运算优化,而非单点查找
3.2 向量候选生成:相似性召回
向量检索的第一性问题
相似度计算是连续空间中的“近邻搜索”问题
精确搜索不可扩展,因此必须近似。
3.3 近似最近邻(ANN)的三大范式
| 范式 | 本质思想 | 代表技术 |
|---|---|---|
| 哈希型 | 相似对象进同桶 | LSH / SimHash |
| 量化型 | 空间离散压缩 | PQ |
| 图搜索 | 小世界导航 | HNSW |
共同目标:
用结构性假设,避免全量距离计算
四、结果排序:定义“相关性”
排序不是数学问题,而是价值判断问题
4.1 统计相关性模型
| 模型 | 核心假设 |
|---|---|
| TF-IDF | 区分度来自“少见但频繁” |
| BM25 | 词频收益递减 |
4.2 图与全局重要性
- PageRank
本质:
相关性不仅来自内容,也来自结构关系
4.3 学习排序模型
逻辑回归 / Learning to Rank:
相关性 = 多信号加权的工程妥协
五、近似 TopK:工程中的必然选择
5.1 为什么必须近似
- 精确 TopK 代价随规模爆炸
- 用户对“绝对最优”不敏感
👉 目标转为:
只要最好的结果在 TopK 里即可
5.2 典型近似策略
| 策略 | 本质 |
|---|---|
| 离线排序截断 | 计算前移 |
| 分层索引 | 高质量优先 |
| 胜者表 | 有损剪枝 |
六、索引工程:时间换稳定性的艺术
6.1 不可变索引思想
- 索引一旦生成,不再修改
- 更新通过“新索引替换旧索引”
体现:
- Double Buffer
- 全量 + 增量索引
6.2 分层合并(LSM 思想)
写入快,查询通过合并优化
- 增量 → 天级 → 周级 → 全量
本质:
用时间换空间与稳定性
6.3 索引拆分
- 业务维度
- 哈希分区
- 关键词分区
本质:
并行化是唯一的扩展手段
七、检索范式的演进
关键词检索 → 统计排序 → 语义向量 → 混合检索 → RAG7.1 RAG 的本质定位
RAG 并不是“新检索”,而是:
检索作为上下文构建系统,为生成服务
它继承了所有传统检索的工程约束。
八、工程原则总结(稳定知识层)
- 先裁剪,再计算
- 离线优于在线
- 不可变优于可变
- 近似优于精确
- 空间换时间
- 并行化优于单机优化
关联内容(自动生成)
- [/中间件/数据库/索引.html](/中间件/数据库/索引.html) 数据库索引技术与检索技术在索引结构和查询优化方面有诸多相通之处,包括B+树、哈希索引等数据结构的应用
- [/算法与数据结构/查找.html](/算法与数据结构/查找.html) 查找算法是检索技术的基础,包括二分查找、哈希查找等基本算法,构成了检索系统的核心组件
- [/算法与数据结构/基本数据结构.html](/算法与数据结构/基本数据结构.html) 数据结构的选择直接影响检索效率,包括树、图、哈希表等结构在检索系统中的应用
- [/数据技术/大数据.html](/数据技术/大数据.html) 大数据技术与检索技术紧密相关,特别是在海量数据的存储、索引和查询方面有共同的技术挑战
- [/数据技术/数据存储.html](/数据技术/数据存储.html) 数据存储方式影响检索性能,包括存储结构、压缩技术等对检索效率的影响
- [/中间件/数据库/ElasticSearch.html](/中间件/数据库/ElasticSearch.html) ElasticSearch是现代检索系统的典型实现,提供了全文检索、分布式搜索等功能
- [/数据技术/推荐系统.html](/数据技术/推荐系统.html) 推荐系统中的相似性计算与检索技术中的向量检索有相似之处,都涉及相似度计算和TopK选择
- [/算法与数据结构/排序.html](/算法与数据结构/排序.html) 排序算法是检索系统结果排序的基础,不同的排序策略影响检索结果的质量和性能
- [/数据技术/数据仓库.html](/数据技术/数据仓库.html) 数据仓库中的OLAP查询与检索技术在多维数据分析和查询优化方面有相似之处
- [/数据技术/数据建模.html](/数据技术/数据建模.html) 数据建模中的维度设计与检索技术中的索引策略有密切关系,两者都需要考虑数据的组织方式以提升查询效率