fix search one nearest neighbor in higher layers (#1295)
diff --git a/lucene/core/src/java/org/apache/lucene/util/hnsw/HNSWGraph.java b/lucene/core/src/java/org/apache/lucene/util/hnsw/HNSWGraph.java
index 37c7338..fb2ecd0 100644
--- a/lucene/core/src/java/org/apache/lucene/util/hnsw/HNSWGraph.java
+++ b/lucene/core/src/java/org/apache/lucene/util/hnsw/HNSWGraph.java
@@ -19,7 +19,6 @@
import java.io.IOException;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -73,8 +72,8 @@
Neighbor f = results.top();
while (candidates.size() > 0) {
Neighbor c = candidates.pollFirst();
- assert c.isDeferred() == false;
- assert f.isDeferred() == false;
+ assert !c.isDeferred();
+ assert !f.isDeferred();
if (c.distance() > f.distance() && results.size() >= ef) {
break;
}
@@ -85,6 +84,9 @@
visited.add(e.docId());
float dist = distance(query, e.docId(), vectorValues);
if (dist < f.distance() || results.size() < ef) {
+ if (results.size() == ef) {
+ results.pop();
+ }
Neighbor n = new ImmutableNeighbor(e.docId(), dist);
candidates.add(n);
results.insertWithOverflow(n);