Skip to content

Commit a5e5936

Browse files
authored
Use stock DVSkipper competitive iterator instead of SecondarySortIterator (#138087)
We seem to get the pruning performance back on the stock lucene iterator with apache/lucene#15397, which is also present in our forked version of the code.
1 parent 60a99e8 commit a5e5936

File tree

5 files changed

+86
-300
lines changed

5 files changed

+86
-300
lines changed

server/src/main/java/org/elasticsearch/index/fielddata/fieldcomparator/LongValuesComparatorSource.java

Lines changed: 0 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,13 @@
88
*/
99
package org.elasticsearch.index.fielddata.fieldcomparator;
1010

11-
import org.apache.lucene.index.DocValuesSkipper;
1211
import org.apache.lucene.index.LeafReaderContext;
1312
import org.apache.lucene.index.NumericDocValues;
1413
import org.apache.lucene.search.DocIdSetIterator;
1514
import org.apache.lucene.search.FieldComparator;
1615
import org.apache.lucene.search.LeafFieldComparator;
1716
import org.apache.lucene.search.LongValues;
1817
import org.apache.lucene.search.Pruning;
19-
import org.apache.lucene.search.Sort;
2018
import org.apache.lucene.search.SortField;
2119
import org.apache.lucene.util.BitSet;
2220
import org.elasticsearch.common.time.DateUtils;
@@ -31,7 +29,6 @@
3129
import org.elasticsearch.index.fielddata.SortedNumericLongValues;
3230
import org.elasticsearch.index.fielddata.plain.SortedNumericIndexFieldData;
3331
import org.elasticsearch.lucene.comparators.XLongComparator;
34-
import org.elasticsearch.lucene.comparators.XNumericComparator;
3532
import org.elasticsearch.search.DocValueFormat;
3633
import org.elasticsearch.search.MultiValueMode;
3734
import org.elasticsearch.search.sort.BucketedSort;
@@ -114,40 +111,6 @@ public LeafFieldComparator getLeafComparator(LeafReaderContext context) throws I
114111
protected NumericDocValues getNumericDocValues(LeafReaderContext context, String field) throws IOException {
115112
return wrap(getLongValues(context, lMissingValue), maxDoc);
116113
}
117-
118-
@Override
119-
protected XNumericComparator<Long>.CompetitiveDISIBuilder buildCompetitiveDISIBuilder(LeafReaderContext context)
120-
throws IOException {
121-
Sort indexSort = context.reader().getMetaData().sort();
122-
if (indexSort == null) {
123-
return super.buildCompetitiveDISIBuilder(context);
124-
}
125-
SortField[] sortFields = indexSort.getSort();
126-
if (sortFields.length != 2) {
127-
return super.buildCompetitiveDISIBuilder(context);
128-
}
129-
if (sortFields[1].getField().equals(field) == false) {
130-
return super.buildCompetitiveDISIBuilder(context);
131-
}
132-
DocValuesSkipper skipper = context.reader().getDocValuesSkipper(field);
133-
DocValuesSkipper primaryFieldSkipper = context.reader().getDocValuesSkipper(sortFields[0].getField());
134-
if (primaryFieldSkipper == null || skipper.docCount() != maxDoc || primaryFieldSkipper.docCount() != maxDoc) {
135-
return super.buildCompetitiveDISIBuilder(context);
136-
}
137-
return new CompetitiveDISIBuilder(this) {
138-
@Override
139-
protected int docCount() {
140-
return skipper.docCount();
141-
}
142-
143-
@Override
144-
protected void doUpdateCompetitiveIterator() {
145-
competitiveIterator.update(
146-
new SecondarySortIterator(docValues, skipper, primaryFieldSkipper, minValueAsLong, maxValueAsLong)
147-
);
148-
}
149-
};
150-
}
151114
};
152115
}
153116
};

server/src/main/java/org/elasticsearch/index/fielddata/fieldcomparator/SecondarySortIterator.java

Lines changed: 0 additions & 168 deletions
This file was deleted.

server/src/test/java/org/elasticsearch/index/fielddata/fieldcomparator/SecondarySortIteratorTests.java

Lines changed: 0 additions & 94 deletions
This file was deleted.

server/src/test/java/org/elasticsearch/index/mapper/DateFieldMapperTests.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import org.elasticsearch.search.DocValueFormat;
4242
import org.elasticsearch.test.index.IndexVersionUtils;
4343
import org.elasticsearch.xcontent.XContentBuilder;
44+
import org.junit.Assert;
4445

4546
import java.io.IOException;
4647
import java.math.BigDecimal;
@@ -934,7 +935,7 @@ protected List<SortShortcutSupport> getSortShortcutSupport() {
934935
b -> b.field("type", "date").field("ignore_malformed", false),
935936
b -> b.startObject("host.name").field("type", "keyword").endObject(),
936937
b -> b.field("@timestamp", "2025-10-30T00:00:00").field("host.name", "foo"),
937-
checkClass
938+
Assert::assertNotNull
938939
),
939940
new SortShortcutSupport(b -> b.field("type", "date"), b -> b.field("field", "2025-10-30T00:00:00"), true),
940941
new SortShortcutSupport(b -> b.field("type", "date_nanos"), b -> b.field("field", "2025-10-30T00:00:00"), true),

0 commit comments

Comments
 (0)