Skip to content

Commit ebc1353

Browse files
authored
Speed up LuceneTopNSourceOperator (#125622)
1 parent 0e0214d commit ebc1353

File tree

3 files changed

+10
-9
lines changed

3 files changed

+10
-9
lines changed

x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/lucene/LuceneTopNSourceOperator.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@
4343
import java.util.function.Function;
4444
import java.util.stream.Collectors;
4545

46-
import static org.apache.lucene.search.ScoreMode.COMPLETE;
4746
import static org.apache.lucene.search.ScoreMode.TOP_DOCS;
47+
import static org.apache.lucene.search.ScoreMode.TOP_DOCS_WITH_SCORES;
4848

4949
/**
5050
* Source operator that builds Pages out of the output of a TopFieldCollector (aka TopN)
@@ -65,7 +65,7 @@ public Factory(
6565
List<SortBuilder<?>> sorts,
6666
boolean scoring
6767
) {
68-
super(contexts, queryFunction, dataPartitioning, taskConcurrency, limit, scoring ? COMPLETE : TOP_DOCS);
68+
super(contexts, queryFunction, dataPartitioning, taskConcurrency, limit, scoring ? TOP_DOCS_WITH_SCORES : TOP_DOCS);
6969
this.maxPageSize = maxPageSize;
7070
this.sorts = sorts;
7171
}
@@ -287,7 +287,7 @@ PerShardCollector newPerShardCollector(ShardContext shardContext, List<SortBuild
287287
SortField[] sortFields = sortAndFormats.get().sort.getSort();
288288
if (sortFields != null && sortFields.length == 1 && sortFields[0].needsScores() && sortFields[0].getReverse() == false) {
289289
// SORT _score DESC
290-
return new ScoringPerShardCollector(shardContext, new TopScoreDocCollectorManager(limit, null, limit).newCollector());
290+
return new ScoringPerShardCollector(shardContext, new TopScoreDocCollectorManager(limit, null, 0).newCollector());
291291
} else {
292292
// SORT ..., _score, ...
293293
var sort = new Sort();
@@ -297,7 +297,7 @@ PerShardCollector newPerShardCollector(ShardContext shardContext, List<SortBuild
297297
l.add(SortField.FIELD_SCORE);
298298
sort = new Sort(l.toArray(SortField[]::new));
299299
}
300-
return new ScoringPerShardCollector(shardContext, new TopFieldCollectorManager(sort, limit, null, limit).newCollector());
300+
return new ScoringPerShardCollector(shardContext, new TopFieldCollectorManager(sort, limit, null, 0).newCollector());
301301
}
302302
}
303303
}

x-pack/plugin/esql/compute/src/test/java/org/elasticsearch/compute/lucene/LuceneTopNSourceOperatorScoringTests.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -110,15 +110,16 @@ public Optional<SortAndFormats> buildSort(List<SortBuilder<?>> sorts) {
110110
@Override
111111
protected Matcher<String> expectedToStringOfSimple() {
112112
return matchesRegex(
113-
"LuceneTopNSourceOperator\\[shards = \\[test], maxPageSize = \\d+, limit = 100, scoreMode = COMPLETE, sorts = \\[\\{.+}]]"
113+
"LuceneTopNSourceOperator\\[shards = \\[test], "
114+
+ "maxPageSize = \\d+, limit = 100, scoreMode = TOP_DOCS_WITH_SCORES, sorts = \\[\\{.+}]]"
114115
);
115116
}
116117

117118
@Override
118119
protected Matcher<String> expectedDescriptionOfSimple() {
119120
return matchesRegex(
120-
"LuceneTopNSourceOperator"
121-
+ "\\[dataPartitioning = (DOC|SHARD|SEGMENT), maxPageSize = \\d+, limit = 100, scoreMode = COMPLETE, sorts = \\[\\{.+}]]"
121+
"LuceneTopNSourceOperator\\[dataPartitioning = (DOC|SHARD|SEGMENT), "
122+
+ "maxPageSize = \\d+, limit = 100, scoreMode = TOP_DOCS_WITH_SCORES, sorts = \\[\\{.+}]]"
122123
);
123124
}
124125

x-pack/plugin/esql/compute/src/test/java/org/elasticsearch/compute/lucene/LuceneTopNSourceOperatorTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,15 +114,15 @@ public Optional<SortAndFormats> buildSort(List<SortBuilder<?>> sorts) {
114114

115115
@Override
116116
protected Matcher<String> expectedToStringOfSimple() {
117-
var s = scoring ? "COMPLETE" : "TOP_DOCS";
117+
var s = scoring ? "TOP_DOCS_WITH_SCORES" : "TOP_DOCS";
118118
return matchesRegex(
119119
"LuceneTopNSourceOperator\\[shards = \\[test], maxPageSize = \\d+, limit = 100, scoreMode = " + s + ", sorts = \\[\\{.+}]]"
120120
);
121121
}
122122

123123
@Override
124124
protected Matcher<String> expectedDescriptionOfSimple() {
125-
var s = scoring ? "COMPLETE" : "TOP_DOCS";
125+
var s = scoring ? "TOP_DOCS_WITH_SCORES" : "TOP_DOCS";
126126
return matchesRegex(
127127
"LuceneTopNSourceOperator"
128128
+ "\\[dataPartitioning = (DOC|SHARD|SEGMENT), maxPageSize = \\d+, limit = 100, scoreMode = "

0 commit comments

Comments
 (0)