nlist 与 nprobe

nlist 控制“建索引阶段”将向量空间分成多少个簇(桶),越大精度越高但索引体积与搜索耗时都会上升;nprobe 则是在“查询阶段”决定要探查多少个簇,越大越可能找到更相似的结果,也越慢。下方交互式图示帮你直观感受两者的影响。

概念速览

nlist:索引被切成几份?

Milvus 构建 IVF 系列索引时,会先对向量进行聚类。nlist 就是聚类中心数量,也意味着索引被分成多少个小桶。nlist 越大,簇越细,索引文件越大但召回潜力更高。

nprobe:查询时探查几份?

查询向量进来后,并不会遍历所有 nlist,而是只挑选最近的若干簇进行精细比较。nprobe 就是实际检查的簇数。值越大,召回更多候选,但也会多一次内存读取 + 距离计算。

交互演示:调节 nlist / nprobe

拖动滑块观察簇大小与查询覆盖范围 查询向量
索引簇中心 候选向量 被探查簇 查询向量

调参建议速查