IVF 索引的 nlist 值需要根据具体的使用情况去设置。一般来说,推荐值为 4 × sqrt(n),其中 n 为 segment 内的 entity 总量。

    nprobe 的选取需要根据数据总量和实际场景在速度性能和准确率之间进行取舍。建议通过多次实验确定一个合理的值。

    以下是使用公开测试数据集 sift50m 针对 nlistnprobe 的一个测试。以索引类型 IVF_SQ8 为例,针对不同 nlist/nprobe 组合的搜索时间和召回率分别进行对比。

    因 CPU 版 Milvus 和 GPU 版 Milvus 测试结果类似,此处仅展示基于 GPU 版 Milvus 测试的结果。

    accuracy_nlist_nprobe.png

    在本次测试中,nlistnprobe 的值成比例增长,召回率随 nlist/nprobe 组合增长呈现上升的趋势。

    performance_nlist_nprobe.png

    nlist 为 4096 和 nprobe 为 128 时,速度性能最佳。