Milvus 索引怎么选
Milvus 常用索引分几类:精确索引用于小数据量与效果基线,倒排聚类索引用少量召回损失换明显加速,图索引在低延迟高召回场景表现最好,磁盘型索引面向内存受限的超大规模。索引类型与度量方式、内存预算、召回目标三者一起决定,不能只看速度。
常见索引对比
| 索引 | 特点 | 适用 |
|---|---|---|
| FLAT | 精确、无训练 | 小数据量与效果基线 |
| IVF_FLAT / IVF_SQ8 | 聚类加速、可量化压缩 | 百万级、内存可控 |
| HNSW | 图索引、低延迟高召回 | 在线问答主力场景 |
| DISKANN | 磁盘索引、内存占用低 | 亿级、内存受限 |
建 HNSW 索引并加载
建 HNSW 索引并加载
index_params = client.prepare_index_params()
index_params.add_index(field_name="vector", index_type="HNSW",
metric_type="COSINE",
params={"M": 16, "efConstruction": 200})
client.create_index("kb", index_params)
client.load_collection("kb") # 检索前需加载选型步骤
- 先用精确索引建立效果基线,记录召回率与延迟
- 数据量到百万级且有内存余量时,换图索引并对比召回损失
- 内存吃紧时考虑量化压缩或磁盘型索引,接受一定精度下降
- 索引参数与集合维度、度量方式一起固定,改参数需要重建索引
- 建完索引必须加载集合,否则检索直接报错
检索参数与影响
| 参数 | 作用 | 调整方向 |
|---|---|---|
| metric_type | 相似度度量 | 必须与向量模型用法一致 |
| ef(查询时) | 图索引的候选队列长度 | 召回不足时逐步调大 |
| nprobe | 倒排索引扫描的聚类数 | 召回与延迟的权衡点 |
| 量化位数 | 压缩精度 | 内存越紧精度损失越大 |
先用精确索引建立效果基线,再换近似索引对比召回与延迟;切换索引类型需要重建,不能只改参数。
运维注意事项
- 索引构建期间集合可能不可检索,重建要安排在低峰窗口
- 内存按向量条数、维度与索引类型综合估算,并留出构建时的额外开销
- 数据持续写入会让新段使用未建索引的粗排,检索效果会短暂波动
- 同一集合内不同向量字段可以有不同索引,但维度必须与向量列声明一致
- 升级集群版本前先在测试环境验证索引兼容性,再动生产数据