Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions lucene/CHANGES.txt
Original file line number Diff line number Diff line change
Expand Up @@ -342,6 +342,9 @@ Optimizations
* GITHUB#15607: Utilize bulk scoring for diversity checking when building HNSW vector indices. This results
in some performance improvements during indexing and segment merges. (Ben Trent)

* GITHUB#15658: Avoid DisjunctionMaxQuery bulk scoring regressions when all clauses only
provide DefaultBulkScorer. (Shimpei Kodama)

Bug Fixes
---------------------
* GITHUB#14161: PointInSetQuery's constructor now throws IllegalArgumentException
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -160,14 +160,28 @@ public Scorer get(long leadCost) throws IOException {

@Override
public BulkScorer bulkScorer() throws IOException {
if (tieBreakerMultiplier == 0f && scoreMode == ScoreMode.TOP_SCORES) {
List<BulkScorer> scorers = new ArrayList<>();
for (ScorerSupplier ss : scorerSuppliers) {
scorers.add(ss.bulkScorer());
if (tieBreakerMultiplier != 0f || scoreMode != ScoreMode.TOP_SCORES) {
return super.bulkScorer();
}

List<BulkScorer> bulkScorers = new ArrayList<>(scorerSuppliers.size());
for (ScorerSupplier ss : scorerSuppliers) {
bulkScorers.add(ss.bulkScorer());
}

// If all are DefaultBulkScorer, combine the underlying scorers directly.
// This avoids the overhead of DisjunctionMaxBulkScorer.
List<Scorer> scorers = new ArrayList<>(bulkScorers.size());
for (BulkScorer bs : bulkScorers) {
if (bs instanceof Weight.DefaultBulkScorer dbs) {
scorers.add(dbs.getScorer());
} else {
return new DisjunctionMaxBulkScorer(bulkScorers);
}
return new DisjunctionMaxBulkScorer(scorers);
}
return super.bulkScorer();

return new Weight.DefaultBulkScorer(
new DisjunctionMaxScorer(tieBreakerMultiplier, scorers, scoreMode, Long.MAX_VALUE));
}

@Override
Expand Down
4 changes: 4 additions & 0 deletions lucene/core/src/java/org/apache/lucene/search/Weight.java
Original file line number Diff line number Diff line change
Expand Up @@ -243,6 +243,10 @@ public DefaultBulkScorer(Scorer scorer) {
}
}

Scorer getScorer() {
return scorer;
}

@Override
public long cost() {
return iterator.cost();
Expand Down
Loading