gsmiller commented on code in PR #13463:
URL: https://github.com/apache/lucene/pull/13463#discussion_r1631767073
##########
lucene/core/src/java/org/apache/lucene/search/knn/MultiLeafKnnCollector.java:
##########
@@ -103,8 +105,11 @@ public boolean collect(int docId, float similarity) {
if (kResultsCollected) {
// as we've collected k results, we can start do periodic updates with
the global queue
if (firstKResultsCollected || (subCollector.visitedCount() & interval)
== 0) {
- cachedGlobalMinSim =
globalSimilarityQueue.offer(updatesQueue.getHeap());
- updatesQueue.clear();
+ for (int i = 0; i < k(); i++) {
Review Comment:
Yeah, thanks @msokolov for the suggestion. Added a comment to explain. But
yes, `#offer` expects a fully sorted array of values and has short-circuiting
logic that depends on that assumption, but the backing array of a heap is only
partially ordered, so you can hit edge-cases where `#offer` incorrectly
short-circuits too early.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]