内容规模上来后,暴力检索(Flat)扛不住。本文讲向量索引选型:Flat、IVF、HNSW 的取舍。
一、为什么索引重要
向量库检索性能取决于索引。小规模 Flat 精确但慢;大规模需近似索引换速度。
二、索引对比
索引
精度
速度
适用规模
Flat
精确
慢
万级以下
IVF
近似
中
十万~百万
HNSW
近似
快
百万级以上
三、示意 HNSW 参数
示意:HNSW 索引构建(以 faiss 为例,通用实现)
import faiss
index = faiss.IndexHNSWFlat(dim, 32) # M=32 控制图连通度
index.hnsw.efConstruction = 200 # 构建质量
index.hnsw.efSearch = 64 # 查询精度
index.add(embeddings)
四、工程实践要点
- 规模驱动:先估数据量再选索引,别过早上复杂索引。
- efSearch 调优:在延迟与召回间平衡,监控 Top-K 命中。
- 重建策略:数据增量大时定期重建,避免碎片。
五、常见误区
- 小规模就用 HNSW,维护成本不划算。
- efSearch 过低,召回掉太多。
- 不监控召回率,索引退化无感知。
六、FAQ
Q1:HNSW 和 IVF 怎么选?
A:追求高召回低延迟选 HNSW;资源受限、可接受近似选 IVF。
Q2:efSearch 设多少?
A:从 32–64 起,用召回率—延迟曲线定;越高越准越慢。
Q3:维度多少合适?
A:中文文本常用 768–1024;维度过高需降维或换模型,平衡效果与成本。
Q4:向量库要独立部署吗?
A:中小规模可用嵌入式(如 Chroma);大规模用专用服务(如 Milvus/Qdrant)。
Q5:索引要常重建吗?
A:增量大或分布漂移时重建;可灰度对比新旧索引召回再切换。