Skip to content

Commit 2dc921e

Browse files
committed
Revert subclassing nonsense
1 parent e603627 commit 2dc921e

File tree

6 files changed

+14
-91
lines changed

6 files changed

+14
-91
lines changed

server/src/main/java/org/elasticsearch/index/IndexSortConfig.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -375,7 +375,7 @@ public Sort buildIndexSort(
375375
if (fieldData == null) {
376376
throw new IllegalArgumentException("docvalues not found for index sort field:[" + sortSpec.field + "]");
377377
}
378-
sortFields[i] = fieldData.indexSortField(this.indexCreatedVersion, sortSpec.missingValue, mode, reverse);
378+
sortFields[i] = fieldData.sortField(this.indexCreatedVersion, sortSpec.missingValue, mode, null, reverse);
379379
validateIndexSortField(sortFields[i]);
380380
}
381381
return new Sort(sortFields);

server/src/main/java/org/elasticsearch/index/fielddata/IndexFieldData.java

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -83,18 +83,6 @@ default SortField sortField(
8383
*/
8484
SortField sortField(@Nullable Object missingValue, MultiValueMode sortMode, Nested nested, boolean reverse);
8585

86-
/**
87-
* Returns the {@link SortField} to use for IndexSorting, if supported
88-
*/
89-
default SortField indexSortField(
90-
IndexVersion indexCreatedVersion,
91-
@Nullable Object missingValue,
92-
MultiValueMode sortMode,
93-
boolean reverse
94-
) {
95-
return sortField(indexCreatedVersion, missingValue, sortMode, null, reverse);
96-
}
97-
9886
/**
9987
* Build a sort implementation specialized for aggregations.
10088
*/

server/src/main/java/org/elasticsearch/index/fielddata/IndexNumericFieldData.java

Lines changed: 10 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@
99

1010
package org.elasticsearch.index.fielddata;
1111

12-
import org.apache.lucene.search.FieldComparator;
13-
import org.apache.lucene.search.Pruning;
1412
import org.apache.lucene.search.SortField;
1513
import org.apache.lucene.search.SortedNumericSelector;
1614
import org.apache.lucene.search.SortedNumericSortField;
@@ -88,7 +86,6 @@ public final ValuesSourceType getValuesSourceType() {
8886
* match the field's <code>numericType</code>.
8987
*/
9088
public final SortField sortField(
91-
boolean isIndexSort,
9289
NumericType targetNumericType,
9390
Object missingValue,
9491
MultiValueMode sortMode,
@@ -107,34 +104,18 @@ public final SortField sortField(
107104
boolean requiresCustomComparator = nested != null
108105
|| (sortMode != MultiValueMode.MAX && sortMode != MultiValueMode.MIN)
109106
|| targetNumericType != getNumericType();
110-
boolean canUseOptimizedSort = canUseOptimizedSort(indexType());
111107
if (sortRequiresCustomComparator() || requiresCustomComparator) {
112-
if (isIndexSort) {
113-
return new SortField(getFieldName(), source, reverse);
114-
}
115-
return new SortField(getFieldName(), source, reverse) {
116-
@Override
117-
public FieldComparator<?> getComparator(int numHits, Pruning pruning) {
118-
return super.getComparator(numHits, canUseOptimizedSort == false || requiresCustomComparator ? Pruning.NONE : pruning);
119-
}
120-
};
108+
SortField sortField = new SortField(getFieldName(), source, reverse);
109+
sortField.setOptimizeSortWithPoints(requiresCustomComparator == false && canUseOptimizedSort(indexType()));
110+
return sortField;
121111
}
122112

123113
SortedNumericSelector.Type selectorType = sortMode == MultiValueMode.MAX
124114
? SortedNumericSelector.Type.MAX
125115
: SortedNumericSelector.Type.MIN;
126-
if (isIndexSort) {
127-
SortField sortField = new SortedNumericSortField(getFieldName(), getNumericType().sortFieldType, reverse, selectorType);
128-
sortField.setMissingValue(source.missingObject(missingValue, reverse));
129-
return sortField;
130-
}
131-
SortField sortField = new SortedNumericSortField(getFieldName(), getNumericType().sortFieldType, reverse, selectorType) {
132-
@Override
133-
public FieldComparator<?> getComparator(int numHits, Pruning pruning) {
134-
return source.newComparator(getFieldName(), numHits, canUseOptimizedSort == false ? Pruning.NONE : pruning, reverse);
135-
}
136-
};
116+
SortField sortField = new SortedNumericSortField(getFieldName(), getNumericType().sortFieldType, reverse, selectorType);
137117
sortField.setMissingValue(source.missingObject(missingValue, reverse));
118+
sortField.setOptimizeSortWithPoints(canUseOptimizedSort(indexType()));
138119
return sortField;
139120
}
140121

@@ -157,48 +138,7 @@ private static boolean canUseOptimizedSort(IndexType indexType) {
157138

158139
@Override
159140
public final SortField sortField(Object missingValue, MultiValueMode sortMode, Nested nested, boolean reverse) {
160-
return sortField(false, getNumericType(), missingValue, sortMode, nested, reverse);
161-
}
162-
163-
@Override
164-
public SortField indexSortField(IndexVersion indexCreatedVersion, Object missingValue, MultiValueMode sortMode, boolean reverse) {
165-
SortField sortField = sortField(true, getNumericType(), missingValue, sortMode, null, reverse);
166-
if (getNumericType() == NumericType.DATE_NANOSECONDS
167-
&& indexCreatedVersion.before(IndexVersions.V_7_14_0)
168-
&& missingValue.equals("_last")
169-
&& Long.valueOf(0L).equals(sortField.getMissingValue())) {
170-
// 7.14 changed the default missing value of sort on date_nanos, from Long.MIN_VALUE
171-
// to 0L - for compatibility we require to a missing value of MIN_VALUE to allow to
172-
// open the index.
173-
sortField.setMissingValue(Long.MIN_VALUE);
174-
return sortField;
175-
} else if (getNumericType().sortFieldType != SortField.Type.INT
176-
// we introduced INT sort type in 8.19 and from 9.1
177-
|| indexCreatedVersion.onOrAfter(IndexVersions.INDEX_INT_SORT_INT_TYPE)
178-
|| indexCreatedVersion.between(IndexVersions.INDEX_INT_SORT_INT_TYPE_8_19, UPGRADE_TO_LUCENE_10_0_0)) {
179-
return sortField;
180-
}
181-
if ((sortField instanceof SortedNumericSortField) == false) {
182-
return sortField;
183-
}
184-
// if the index was created before 8.19, or in 9.0
185-
// we need to rewrite the sort field to use LONG sort type
186-
187-
// Rewrite INT sort to LONG sort.
188-
// Before indices used TYPE.LONG for index sorting on integer field,
189-
// and this is stored in their index writer config on disk and can't be modified.
190-
// Now sortField() returns TYPE.INT when sorting on integer field,
191-
// but to support sorting on old indices, we need to rewrite this sort to TYPE.LONG.
192-
XFieldComparatorSource longSource = comparatorSource(NumericType.LONG, missingValue, sortMode, null);
193-
SortedNumericSortField numericSortField = (SortedNumericSortField) sortField;
194-
SortedNumericSortField rewrittenSortField = new SortedNumericSortField(
195-
sortField.getField(),
196-
SortField.Type.LONG,
197-
sortField.getReverse(),
198-
numericSortField.getSelector()
199-
);
200-
rewrittenSortField.setMissingValue(longSource.missingObject(missingValue, reverse));
201-
return rewrittenSortField;
141+
return sortField(getNumericType(), missingValue, sortMode, nested, reverse);
202142
}
203143

204144
@Override
@@ -236,21 +176,17 @@ public SortField sortField(
236176
// and this is stored in their index writer config on disk and can't be modified.
237177
// Now sortField() returns TYPE.INT when sorting on integer field,
238178
// but to support sorting on old indices, we need to rewrite this sort to TYPE.LONG.
239-
XFieldComparatorSource longSource = comparatorSource(NumericType.LONG, missingValue, sortMode, nested);
240179
SortedNumericSortField numericSortField = (SortedNumericSortField) sortField;
241180
SortedNumericSortField rewrittenSortField = new SortedNumericSortField(
242181
sortField.getField(),
243182
SortField.Type.LONG,
244183
sortField.getReverse(),
245184
numericSortField.getSelector()
246-
) {
247-
@Override
248-
public FieldComparator<?> getComparator(int numHits, Pruning pruning) {
249-
// we don't optimize sorting on int field for old indices
250-
return super.getComparator(numHits, Pruning.NONE);
251-
}
252-
};
185+
);
186+
XFieldComparatorSource longSource = comparatorSource(NumericType.LONG, missingValue, sortMode, nested);
253187
rewrittenSortField.setMissingValue(longSource.missingObject(missingValue, reverse));
188+
// we don't optimize sorting on int field for old indices
189+
rewrittenSortField.setOptimizeSortWithPoints(false);
254190
return rewrittenSortField;
255191
}
256192

server/src/main/java/org/elasticsearch/search/sort/FieldSortBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -355,7 +355,7 @@ public SortFieldAndFormat build(SearchExecutionContext context) throws IOExcepti
355355
}
356356
IndexNumericFieldData numericFieldData = (IndexNumericFieldData) fieldData;
357357
NumericType resolvedType = resolveNumericType(numericType);
358-
field = numericFieldData.sortField(false, resolvedType, missing, localSortMode(), nested, reverse);
358+
field = numericFieldData.sortField(resolvedType, missing, localSortMode(), nested, reverse);
359359
isNanosecond = resolvedType == NumericType.DATE_NANOSECONDS;
360360
} else {
361361
field = fieldData.sortField(context.indexVersionCreated(), missing, localSortMode(), nested, reverse);

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -169,8 +169,7 @@ protected SyntheticSourceSupport syntheticSourceSupportForKeepTests(boolean igno
169169
@Override
170170
protected List<SortShortcutSupport> getSortShortcutSupport() {
171171
return List.of(
172-
// TODO enable pruning here
173-
new SortShortcutSupport(this::minimalMapping, this::writeField, false),
172+
new SortShortcutSupport(this::minimalMapping, this::writeField, true),
174173
new SortShortcutSupport(IndexVersion.fromId(5000099), this::minimalMapping, this::writeField, false)
175174
);
176175
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ protected IngestScriptSupport ingestScriptSupport() {
7474
@Override
7575
protected List<SortShortcutSupport> getSortShortcutSupport() {
7676
return List.of(
77-
new SortShortcutSupport(this::minimalMapping, this::writeField, false),
77+
new SortShortcutSupport(this::minimalMapping, this::writeField, true),
7878
new SortShortcutSupport(IndexVersion.fromId(5000099), this::minimalMapping, this::writeField, false)
7979
);
8080
}

0 commit comments

Comments
 (0)