如果设置了最大编码个数之后,当达到最大时,后面的就不再遍历,这里的截断是针对二级量化器的聚类中心点的,针对一个中心点没有设置截断
357 for (size_t ik = 0; ik < nprobe; ik++) {
358
359 nscan += scan_one_list (
360 keys [i * nprobe + ik],
361 coarse_dis[i * nprobe + ik],
362 simi, idxi
363 );
364
365 if (max_codes && nscan >= max_codes) { ///截断处理
366 break;
367 }
368 }
248 void IndexIVF::search_preassigned (idx_t n, const float *x, idx_t k,
249 const idx_t *keys,
250 const float *coarse_dis ,
251 float *distances, idx_t *labels,
252 bool store_pairs,
253 const IVFSearchParameters *params) const
254 {
255 long nprobe = params ? params->nprobe : this->nprobe;
256 long max_codes = params ? params->max_codes : this->max_codes;
257
258 size_t nlistv = 0, ndis = 0, nheap = 0;
259
260 using HeapForIP = CMin<float, idx_t>;
261 using HeapForL2 = CMax<float, idx_t>;