99
1010package org .elasticsearch .index .fielddata ;
1111
12- import org .apache .lucene .search .FieldComparator ;
13- import org .apache .lucene .search .Pruning ;
1412import org .apache .lucene .search .SortField ;
1513import org .apache .lucene .search .SortedNumericSelector ;
1614import 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
0 commit comments