阿里云Milvus支持多种向量检索算法,主要包括FLAT、IVF系列、HNSW、ANNOY、DISKANN等主流索引类型,每种算法针对不同的应用场景和性能需求进行优化。
一、核心索引类型
1. FLAT索引 FLAT是唯一保证100%召回率的精确搜索索引,采用暴力搜索方式遍历所有向量,适合小规模数据集(百万级以下)和高精度要求的场景。由于不进行任何压缩或聚类,内存占用最高但精度最优。 2. IVF系列索引 IVF(Inverted File)通过K-means聚类将向量空间划分为多个簇,大幅缩小搜索范围。主要变体包括:
- IVF_FLAT:在簇内使用原始向量存储,召回率约98%,适合中等规模数据(10万-1000万条)
- IVF_SQ8:通过8位标量量化压缩向量,内存占用仅为IVF_FLAT的1/4,召回率约90%
- IVF_PQ:采用乘积量化技术,内存占用极低(原始大小的1/32到1/64),适合亿级数据量,召回率约90%-95%
3. HNSW索引 HNSW(Hierarchical Navigable Small World)基于分层图结构,通过多层导航图实现高效近邻搜索。该算法在高维数据和大规模数据集(亿级以上)表现优异,召回率可达98%以上,查询速度极快,但内存占用较高(约为原始数据的1.5-2倍)。 4. ANNOY索引 ANNOY基于树结构构建多叉树索引,适合低维向量空间,具有较高的召回率,但构建和查询时内存需求较大。 5. DISKANN索引 DISKANN是磁盘友好的图索引算法,将大部分数据存储在SSD上,内存占用降低10-20倍,适合超大规模数据集(十亿级以上)和内存受限场景,召回率约95%。
二、索引选择指南
| 索引类型 | 速度 | 精度 | 适用数据量 | 内存开销 | 核心参数 |
|---|---|---|---|---|---|
| FLAT | 极慢 | 100% | ≤10万条 | 极高 | 无 |
| IVF_FLAT | 中等 | ≈98% | 10万-1000万条 | 高 | nlist=1024, nprobe=32 |
| IVF_SQ8 | 快 | ≈90% | 1000万-10亿条 | 低 | nlist=256, nprobe=32 |
| IVF_PQ | 极快 | ≈90% | 亿级以上 | 极低 | m=32, nbits=8 |
| HNSW | 极快 | ≈98% | ≥1亿条 | 中等 | M=32, ef=64 |
| DISKANN | 快 | ≈95% | ≥10亿条 | 极低 | search_list=64 |
三、距离度量类型
Milvus支持多种距离计算方式:
- 欧氏距离(L2) :适用于计算机视觉领域,距离越小相似度越高
- 内积(IP) :适用于自然语言处理,值越大相似度越高
- 余弦相似度(COSINE) :适用于文本和推荐系统,值越大相似度越高
- 汉明距离(Hamming) :适用于二值型向量
- 杰卡德距离(Jaccard) :适用于化学分子式检索
四、应用场景建议
小规模高精度场景:选择FLAT索引,确保100%召回率 中等规模平衡场景:选择IVF_FLAT,兼顾速度与精度 大规模内存敏感场景:选择IVF_SQ8或IVF_PQ,大幅降低内存成本 实时检索高并发场景:选择HNSW,实现毫秒级响应 超大规模磁盘存储场景:选择DISKANN,支持十亿级数据检索 阿里云Milvus通过Cardinal商业内核进一步优化了这些索引算法,相比开源版本性能提升3倍以上,资源节约30%以上,支持百亿级向量数据的毫秒级检索。