在 RAG 系统中,向量检索是将用户问题转化为向量后,在知识库中快速找到最相关的文档片段的关键步骤。当知识库规模从数千条增长到百万甚至千万级别时,精确的暴力检索(Flat)耗时会变得不可接受。因此,业界发展出多种近似最近邻(ANN)索引算法,在检索速度、召回率和内存开销之间寻找平衡。下面介绍四种最主流的方法,并给出直观的对比与选型建议。
1. 暴力检索(Flat)
原理:不做任何预处理或索引,直接将查询向量与数据库中的每一个向量进行全量距离计算,最后返回距离最近的 top‑k 个结果。
特点:
- 精度最高,确保找到的是真正的最近邻,是精确检索而非近似。
- 速度最慢,时间复杂度 O(N·D),其中 N 为向量总数,D 为维度。当 N 超过几十万时,延迟会上升到秒级甚至更高,不适合实时应用。
- 内存占用与原始向量总量一致,无额外索引开销。
适用场景:小规模数据集(<10 万条)的基准测试,或对精度有极致要求且可容忍高延迟的离线分析。
2. 倒排文件索引(IVF)
原理:先对向量空间进行聚类,用 K‑Means 将所有向量划分到若干个簇(例如 1024 个),构建一个“倒排列表”——记录每个簇包含哪些向量。查询时,先计算查询向量与各簇中心点的距离,只搜索最近的一小部分簇(比如最接近的 10 个簇),在候选集内做暴力检索。这样就大幅减少了需要比对的向量数量。
特点:
- 检索速度提升显著,因为只搜索一小部分簇内的向量。
- 是近似搜索,当簇中心不能完美代表簇内向量分布时,可能漏掉部分真正最近邻,召回率可通过增大搜索簇数(
nprobe)来提升,越大越接近暴力检索。 - 需要存储聚类中心及倒排列表,内存开销略高于原始向量。
适用场景:中等规模到大规模数据集(百万级),要求较快响应且能接受轻微精度损失的通用场景。它是许多向量数据库的默认基础索引。
3. 积量化(PQ)
原理:PQ 主要解决高维向量存储和距离计算的成本问题。它将向量等分成多个子段,对每个子段独立进行聚类,得到各子段的码本。原始向量用每个子段距离最近的码本索引来近似表示,从而将存储从浮点数压缩到短整数。查询时,通过预计算查询向量与各码本的距离表,可以快速估算与压缩后向量的近似距离,而不必还原原始向量。
特点:
- 极大的内存节省,压缩比可达 10–30 倍甚至更高,使十亿级向量也能在内存中运行。
- 检索速度提升因为需要处理的数据量变小,距离计算也变成查表累加。
- 存在精度损失,压缩越激进损失越大,通常需要配合其他索引结构(如 IVF+PQ)使用。
适用场景:超大规模数据集(千万级以上)且内存资源受限时。PQ 常与 IVF 组合成“IVF+PQ”,同时实现搜索范围减小和数据压缩。
4. 分层可导航小世界图(HNSW)
原理:HNSW 构建一个多层图结构。底层包含所有节点(向量),按近似最近邻关系连接;上层是下层的稀疏采样,类似“高速公路”。插入节点时,算法根据随机层级决定其最高层,并从顶层开始贪心搜索最近邻,不断下降至底层建立连接。查询时,从顶层随机入口点贪婪移动,快速逼近目标区域,到达底层后再精细搜索。
特点:
- 检索速度极快,通常只需要计算几十到几百次距离就能得到高质量结果,是目前公认最快的 ANN 算法之一。
- 召回率高,在中高召回区间(如 0.95–0.99)与速度的平衡非常出色。
- 构建索引相对较慢,且内存占用大(需要存储所有节点的邻接表)。对频繁增删的在线环境支持较差,因为需要维护图结构。
适用场景:对查询延迟有严格要求、且数据集相对静态或更新频率不高的高并发实时服务。最适合 RAG 的在线检索环节。
性能对比一览
| 算法 | 检索速度 | 召回率 | 内存占用 | 构建速度 | 是否支持增量更新 |
|------|---------|--------|----------|----------|-----------------|
| Flat | 极慢 | 100% | 低(仅向量) | 无需构建 | 是 |
| IVF | 快 | 中–高(可调) | 中(加倒排列表) | 较快(需聚类) | 有限支持 |
| PQ | 快 | 较低(有损压缩) | 极低(高压缩) | 中等(需码本训练) | 有限支持 |
| HNSW | 极快 | 高 | 高(图结构) | 较慢(建图) | 弱,重建为佳 |
实际案例:某电商知识库有 500 万条商品描述片段,使用 Milvus 建库时选择 IVF+PQ 索引,检索延迟稳定在 10 毫秒以内,内存占用仅为全量向量的 1/8,同时召回率保持在 98%。如果用户规模较小(<10万条),直接用 Flat 也能获得足够的速度,并可避免任何精度损失。
如何选择
- 小规模且追求极简:Flat,零调参,精度完美。
- 中型百万级,要求均衡性能:IVF 调好
nprobe,大多数场景已够用。 - 超大规模且内存紧张:IVF+PQ 组合,兼顾压缩和搜索效率。
- 极低延迟、高并发且数据变动少:HNSW 是最优选择,尤其在需要 >95% 召回率时表现亮眼。
理解这些算法的取舍,能帮助你在实际部署时根据数据规模、硬件预算和响应要求做出合理决策。许多向量数据库(如 Milvus、Weaviate、Qdrant)都内置了这些索引,只需通过参数配置即可启用,无需手动实现。