@@ -47,10 +47,10 @@ public DefaultIVFVectorsReader(SegmentReadState state, FlatVectorsReader rawVect
4747 super (state , rawVectorsReader );
4848 }
4949
50- @ Override
5150 CentroidIterator getPostingListPrefetchIterator (CentroidIterator centroidIterator , IndexInput postingListSlice ) throws IOException {
5251 return new CentroidIterator () {
53- CentroidOffsetAndLength nextOffsetAndLength = null ;
52+ CentroidOffsetAndLength nextOffsetAndLength =
53+ centroidIterator .hasNext () ? centroidIterator .nextPostingListOffsetAndLength () : null ;
5454
5555 private void prefetch (CentroidOffsetAndLength offsetAndLength ) throws IOException {
5656 postingListSlice .prefetch (offsetAndLength .offset (), offsetAndLength .length ());
@@ -64,30 +64,21 @@ public boolean hasNext() {
6464
6565 @ Override
6666 public CentroidOffsetAndLength nextPostingListOffsetAndLength () throws IOException {
67- CentroidOffsetAndLength offsetAndLength ;
68- // first time we need to fetch two if possible
69- if (nextOffsetAndLength == null ) {
70- offsetAndLength = centroidIterator .nextPostingListOffsetAndLength ();
71- if (centroidIterator .hasNext ()) {
72- nextOffsetAndLength = centroidIterator .nextPostingListOffsetAndLength ();
73- prefetch (nextOffsetAndLength );
74- }
67+ CentroidOffsetAndLength offsetAndLength = nextOffsetAndLength ;
68+ if (centroidIterator .hasNext ()) {
69+ nextOffsetAndLength = centroidIterator .nextPostingListOffsetAndLength ();
70+ prefetch (nextOffsetAndLength );
7571 } else {
76- offsetAndLength = nextOffsetAndLength ;
77- if (centroidIterator .hasNext ()) {
78- nextOffsetAndLength = centroidIterator .nextPostingListOffsetAndLength ();
79- prefetch (nextOffsetAndLength );
80- } else {
81- nextOffsetAndLength = null ; // indicate we reached the end
82- }
72+ nextOffsetAndLength = null ; // indicate we reached the end
8373 }
8474 return offsetAndLength ;
8575 }
8676 };
8777 }
8878
8979 @ Override
90- CentroidIterator getCentroidIterator (FieldInfo fieldInfo , int numCentroids , IndexInput centroids , float [] targetQuery )
80+ CentroidIterator getCentroidIterator (
81+ FieldInfo fieldInfo , int numCentroids , IndexInput centroids , float [] targetQuery , IndexInput postingListSlice )
9182 throws IOException {
9283 final FieldEntry fieldEntry = fields .get (fieldInfo .number );
9384 final float globalCentroidDp = fieldEntry .globalCentroidDp ();
@@ -110,8 +101,9 @@ CentroidIterator getCentroidIterator(FieldInfo fieldInfo, int numCentroids, Inde
110101 final ES92Int7VectorsScorer scorer = ESVectorUtil .getES92Int7VectorsScorer (centroids , fieldInfo .getVectorDimension ());
111102 centroids .seek (0L );
112103 int numParents = centroids .readVInt ();
104+ CentroidIterator centroidIterator ;
113105 if (numParents > 0 ) {
114- return getCentroidIteratorWithParents (
106+ centroidIterator = getCentroidIteratorWithParents (
115107 fieldInfo ,
116108 centroids ,
117109 numParents ,
@@ -121,8 +113,10 @@ CentroidIterator getCentroidIterator(FieldInfo fieldInfo, int numCentroids, Inde
121113 queryParams ,
122114 globalCentroidDp
123115 );
116+ } else {
117+ centroidIterator = getCentroidIteratorNoParent (fieldInfo , centroids , numCentroids , scorer , quantized , queryParams , globalCentroidDp );
124118 }
125- return getCentroidIteratorNoParent ( fieldInfo , centroids , numCentroids , scorer , quantized , queryParams , globalCentroidDp );
119+ return getPostingListPrefetchIterator ( centroidIterator , postingListSlice );
126120 }
127121
128122 private static CentroidIterator getCentroidIteratorNoParent (
0 commit comments