Skip to content

Commit ed8940a

Browse files
committed
iter
1 parent b3568fa commit ed8940a

File tree

3 files changed

+14
-19
lines changed

3 files changed

+14
-19
lines changed

server/src/main/java/org/elasticsearch/search/vectors/AbstractMaxScoreKnnCollector.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
public abstract class AbstractMaxScoreKnnCollector extends AbstractKnnCollector {
1717
public static final long LEAST_COMPETITIVE = NeighborQueue.encodeRaw(Integer.MAX_VALUE, Float.NEGATIVE_INFINITY);
1818

19-
2019
protected AbstractMaxScoreKnnCollector(int k, long visitLimit, KnnSearchStrategy searchStrategy) {
2120
super(k, visitLimit, searchStrategy);
2221
}

server/src/main/java/org/elasticsearch/search/vectors/DiversifyingNearestChildrenKnnCollector.java

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
import org.apache.lucene.search.knn.KnnSearchStrategy;
2727
import org.apache.lucene.util.ArrayUtil;
2828
import org.apache.lucene.util.BitSet;
29-
import org.apache.lucene.util.NumericUtils;
29+
import org.elasticsearch.index.codec.vectors.cluster.NeighborQueue;
3030

3131
/**
3232
* This collects the nearest children vectors. Diversifying the results over the provided parent
@@ -36,7 +36,7 @@ class DiversifyingNearestChildrenKnnCollector extends AbstractMaxScoreKnnCollect
3636

3737
private final BitSet parentBitSet;
3838
private final NodeIdCachingHeap heap;
39-
private long minCompetitiveDocScore = Long.MIN_VALUE;
39+
private long minCompetitiveDocScore = LEAST_COMPETITIVE;
4040
private float minCompetitiveScore = Float.NEGATIVE_INFINITY;
4141

4242
/**
@@ -74,10 +74,7 @@ public boolean collect(int docId, float nodeScore) {
7474

7575
@Override
7676
public float minCompetitiveSimilarity() {
77-
if (heap.size >= k() || minCompetitiveDocScore > Long.MIN_VALUE) {
78-
return Math.max(minCompetitiveScore, heap.topScore());
79-
}
80-
return Float.NEGATIVE_INFINITY;
77+
return heap.size < k() ? Float.NEGATIVE_INFINITY : Math.max(minCompetitiveScore, heap.topScore());
8178
}
8279

8380
@Override
@@ -108,17 +105,14 @@ public int numCollected() {
108105

109106
@Override
110107
public long getMinCompetitiveDocScore() {
111-
return (((long) NumericUtils.floatToSortableInt(heap.topScore())) << 32) | (0xFFFFFFFFL & ~heap.topNode());
108+
return heap.size() > 0 ? Math.max(NeighborQueue.encodeRaw(heap.topNode(), heap.topScore()), minCompetitiveDocScore) : minCompetitiveDocScore;
112109
}
113110

114111
@Override
115112
void updateMinCompetitiveDocScore(long minCompetitiveDocScore) {
116-
if (minCompetitiveDocScore == Long.MIN_VALUE) {
117-
// no update
118-
return;
119-
}
120-
this.minCompetitiveDocScore = minCompetitiveDocScore;
121-
this.minCompetitiveScore = NumericUtils.sortableIntToFloat((int) (minCompetitiveDocScore >> 32));
113+
long queueMinCompetitiveDocScore = heap.size() > 0 ? NeighborQueue.encodeRaw(heap.topNode(), heap.topScore()) : LEAST_COMPETITIVE;
114+
this.minCompetitiveDocScore = Math.max(this.minCompetitiveDocScore, Math.max(queueMinCompetitiveDocScore, minCompetitiveDocScore));
115+
this.minCompetitiveScore = NeighborQueue.decodeScoreRaw(this.minCompetitiveDocScore);
122116
}
123117

124118
/**
@@ -154,10 +148,16 @@ private static class NodeIdCachingHeap {
154148
}
155149

156150
public final int topNode() {
151+
if (size == 0) {
152+
return Integer.MAX_VALUE;
153+
}
157154
return heapNodes[1].child;
158155
}
159156

160157
public final float topScore() {
158+
if (size == 0) {
159+
return Float.NEGATIVE_INFINITY;
160+
}
161161
return heapNodes[1].score;
162162
}
163163

server/src/main/java/org/elasticsearch/search/vectors/IVFKnnSearchStrategy.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,13 @@
1010

1111
import org.apache.lucene.search.knn.KnnSearchStrategy;
1212
import org.apache.lucene.util.SetOnce;
13-
import org.elasticsearch.index.codec.vectors.cluster.NeighborQueue;
14-
import org.elasticsearch.logging.LogManager;
15-
import org.elasticsearch.logging.Logger;
1613

1714
import java.util.Objects;
1815
import java.util.concurrent.atomic.LongAccumulator;
1916

2017
public class IVFKnnSearchStrategy extends KnnSearchStrategy {
21-
private static final Logger logger = LogManager.getLogger(IVFKnnSearchStrategy.class);
2218
private final float visitRatio;
23-
private SetOnce<AbstractMaxScoreKnnCollector> collector = new SetOnce<>();
19+
private final SetOnce<AbstractMaxScoreKnnCollector> collector = new SetOnce<>();
2420
private final LongAccumulator accumulator;
2521

2622
IVFKnnSearchStrategy(float visitRatio, LongAccumulator accumulator) {

0 commit comments

Comments
 (0)