Skip to content

Commit 2737f39

Browse files
committed
iter
1 parent 0145341 commit 2737f39

File tree

2 files changed

+18
-28
lines changed

2 files changed

+18
-28
lines changed

server/src/main/java/org/elasticsearch/index/codec/vectors/DefaultIVFVectorsReader.java

Lines changed: 14 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -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(

server/src/main/java/org/elasticsearch/index/codec/vectors/IVFVectorsReader.java

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -85,10 +85,8 @@ protected IVFVectorsReader(SegmentReadState state, FlatVectorsReader rawVectorsR
8585
}
8686
}
8787

88-
abstract CentroidIterator getPostingListPrefetchIterator(CentroidIterator centroidIterator, IndexInput postingListSlice)
89-
throws IOException;
90-
91-
abstract CentroidIterator getCentroidIterator(FieldInfo fieldInfo, int numCentroids, IndexInput centroids, float[] target)
88+
abstract CentroidIterator getCentroidIterator(
89+
FieldInfo fieldInfo, int numCentroids, IndexInput centroids, float[] target, IndexInput postingListSlice)
9290
throws IOException;
9391

9492
private static IndexInput openDataInput(
@@ -245,10 +243,8 @@ public final void search(String field, float[] target, KnnCollector knnCollector
245243
// we account for soar vectors here. We can potentially visit a vector twice so we multiply by 2 here.
246244
long maxVectorVisited = (long) (2.0 * visitRatio * numVectors);
247245
IndexInput postListSlice = entry.postingListSlice(ivfClusters);
248-
CentroidIterator centroidPrefetchingIterator = getPostingListPrefetchIterator(
249-
getCentroidIterator(fieldInfo, entry.numCentroids, entry.centroidSlice(ivfCentroids), target),
250-
postListSlice
251-
);
246+
CentroidIterator centroidPrefetchingIterator = getCentroidIterator(
247+
fieldInfo, entry.numCentroids, entry.centroidSlice(ivfCentroids), target, postListSlice);
252248
PostingVisitor scorer = getPostingVisitor(fieldInfo, postListSlice, target, acceptDocs);
253249
long expectedDocs = 0;
254250
long actualDocs = 0;

0 commit comments

Comments
 (0)