jpountz commented on code in PR #14701: URL: https://github.com/apache/lucene/pull/14701#discussion_r2104619608
########## lucene/core/src/java/org/apache/lucene/search/ScorerUtil.java: ########## @@ -117,4 +119,69 @@ public int length() { return in.length(); } } + + static void filterCompetitiveHits( + DocAndScoreAccBuffer buffer, + double maxRemainingScore, + float minCompetitiveScore, + int numScorers) { + int newSize = 0; + for (int i = 0; i < buffer.size; ++i) { + float maxPossibleScore = + (float) MathUtil.sumUpperBound(buffer.scores[i] + maxRemainingScore, numScorers); + if (maxPossibleScore >= minCompetitiveScore) { + buffer.docs[newSize] = buffer.docs[i]; + buffer.scores[newSize] = buffer.scores[i]; + newSize++; + } + } + buffer.size = newSize; + } + + /** + * Apply the provided {@link Scorable} as a required clause on the given {@link + * DocAndScoreAccBuffer}. This filters out documents from the buffer that do not match, and adds + * the scores of this {@link Scorable} to the scores. + * + * <p><b>NOTE</b>: The provided buffer must contain doc IDs in sorted order, with no duplicates. + */ + static void applyRequiredClause( + DocAndScoreAccBuffer buffer, DocIdSetIterator iterator, Scorable scorable) + throws IOException { + int intersectionSize = 0; + int curDoc = iterator.docID(); + for (int i = 0; i < buffer.size; ++i) { + int targetDoc = buffer.docs[i]; + if (curDoc < targetDoc) { + curDoc = iterator.advance(targetDoc); + } + if (curDoc == targetDoc) { Review Comment: I wondered the same. :) Let's keep it this way (slightly simpler) and look into whether this can be made faster with VectorUtil in a follow-up? -- 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: issues-unsubscr...@lucene.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: issues-unsubscr...@lucene.apache.org For additional commands, e-mail: issues-h...@lucene.apache.org