nlist和nprobe
- nlist 是调用 create_index 时设置的参数,nprobe 则是调用 search 时设置的参数。
- IVFLAT 和 SQ8 索引都是通过聚类算法把大量的向量划分成很多‘簇’(也可以叫‘桶’),
- nlist 指的就是聚类时划分桶的总数。
- 通过索引查询步骤
- 第一步先找到和目标向量最接近的若干个桶(nprobe:若干个桶的数量)
- 若干个桶里通过比较向量距离查找出最相似的 k 条向量。
- nlist越大,也就是建立索引时,划分桶的数量越多,同时每个桶中的向量数量越少
- 查询时,比较的向量越少,结果就是:性能和速度越好;准确率越低
- nlist官方推荐为 4*sqrt(n),其中,n表示向量的个数
- nprobe越大,则比较的桶和向量越多,结果就是:性能和速度相对越低,准确率越高