Milvus索引
一、支持的检索算法及差异
1. FLAT(暴力检索)
- 原理:直接加载原始向量数据,逐一遍历计算距离,属于精确搜索。
- 特点:
- 无需构建索引,检索精度100%。
- 计算开销大,适合小规模数据集(如百万级以下)。
- 适用场景:对精度要求极高且数据量较小的场景,如测试验证、小规模实时搜索。
2. IVF(倒排文件索引)
- 原理:通过聚类(如K-means)将向量划分为多个簇(分桶),检索时仅搜索最近邻的若干簇。
- 变种:
- IVF_FLAT:不压缩数据,平衡查询速度与召回率,通过
nprobe参数调整搜索的簇数量。 - IVF_SQ8:标量量化压缩向量(4字节浮点转为1字节整型),内存占用降至1/4,适合内存敏感场景。
- IVF_PQ:乘积量化(PQ)进一步压缩数据,牺牲部分精度换取更高存储效率,适合超大规模数据。
- IVF_FLAT:不压缩数据,平衡查询速度与召回率,通过
- 特点:查询速度与召回率可通过
nprobe灵活调控,适合中等至大规模数据集。
3. HNSW(分层可导航小世界图)
- 原理:构建多层图结构,高层稀疏连接,底层密集连接,通过逐层导航加速搜索。
- 特点:
- 支持高维向量(如万维以上),查询速度与精度均较高。
- 内存占用较大,适合高精度、低延迟场景。
- 适用场景:图像检索、语义搜索等高维数据场景。
4. ANNOY(近似最近邻随机森林)
- 原理:通过构建多棵随机树分割向量空间,树间独立搜索后合并结果。
- 特点:
- 内存占用低,适合资源受限的中等规模数据集。
- 召回率受树的数量(
n_trees)和搜索深度影响。
- 适用场景:内存敏感的中等规模检索(如千万级以下)。
5. DISKANN(基于磁盘的索引)
- 原理:将索引存储在磁盘上,结合内存缓存热点数据,支持超大规模向量检索。
- 特点:
- 存储成本低,适合百亿级以上数据。
- 查询速度略低于内存索引,但扩展性强。
- 适用场景:内存不足的超大规模数据场景(如互联网级推荐系统)。
二、算法选择的关键因素
1. 数据规模
- 小数据(<100万):优先选择FLAT(精确搜索)或HNSW(高精度)。
- 中等数据(百万级):IVF系列(灵活调控速度与精度)或ANNOY(内存优化)。
- 超大数据(亿级以上):DISKANN(磁盘存储)或IVF_PQ(压缩优化)。
2. 向量维度
- 低维(<100):IVF、HNSW均适用。
- 高维(>1000):HNSW(图结构抗高维性能好)或ANNOY(树结构分割空间)。
3. 精度与速度的权衡
- 高精度优先:HNSW、FLAT。
- 速度优先:IVF(调整
nprobe)、ANNOY(减少树的数量)。
4. 硬件资源
- GPU支持:IVF_SQ8H可将分桶搜索卸载到GPU,加速计算。
- 内存限制:ANNOY、DISKANN适合内存受限场景。
5. 应用场景
- 实时搜索(低延迟):HNSW、IVF_FLAT。
- 混合检索(向量+文本):Milvus 2.5+支持结合BM25关键词搜索与向量检索的混合模式,适用于RAG等复杂场景。
三、总结建议
- 推荐组合:
- 通用场景:HNSW(平衡速度与精度)或IVF_FLAT(参数易调控)。
- 资源敏感场景:ANNOY(低内存)、DISKANN(超大磁盘存储)。
- 混合检索需求:启用Milvus 2.5+的混合检索功能,结合BM25与向量算法。
通过灵活结合数据规模、硬件资源和业务需求,可最大化Milvus的检索性能。具体参数调优(如nprobe、efConstruction等)需结合实际测试数据进一步优化。

浙公网安备 33010602011771号