Skip to content

Commit f8c7619

Browse files
committed
LUCENE-10377: Replace 'sortPos' with 'enableSkipping' in SortField.getComparator() (#603)
The sort position parameter in SortField.getComparator() is only ever used to determine whether or not skipping should be enabled on a given comparator, so the parameter name should reflect that. This commit also explicitly disables skipping in a number of cases where it is never used, in particular CheckIndex and the grouping collectors.
1 parent 8117169 commit f8c7619

30 files changed

+86
-170
lines changed

lucene/CHANGES.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ API Changes
2525

2626
* LUCENE-10349: WordListLoader methods now return unmodifiable CharArraySets. (Uwe Schindler)
2727

28+
* LUCENE-10377: SortField.getComparator() has changed signature. The second parameter is now
29+
a boolean indicating whether or not skipping should be enabled on the comparator.
30+
(Alan Woodward)
31+
2832
New Features
2933
---------------------
3034

@@ -143,6 +147,9 @@ Bug Fixes
143147
* LLUCENE-10353: Add random null injection to TestRandomChains. (Robert Muir,
144148
Uwe Schindler)
145149

150+
* LUCENE-10377: CheckIndex could incorrectly throw an error when checking index sorts
151+
defined on older indexes. (Alan Woodward)
152+
146153
Other
147154
---------------------
148155

lucene/core/src/java/org/apache/lucene/document/FeatureSortField.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public FeatureSortField(String field, String featureName) {
4444
}
4545

4646
@Override
47-
public FieldComparator<?> getComparator(int numHits, int sortPos) {
47+
public FieldComparator<?> getComparator(int numHits, boolean enableSkipping) {
4848
return new FeatureComparator(numHits, getField(), featureName);
4949
}
5050

lucene/core/src/java/org/apache/lucene/document/LatLonPointSortField.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ final class LatLonPointSortField extends SortField {
3838
}
3939

4040
@Override
41-
public FieldComparator<?> getComparator(int numHits, int sortPos) {
41+
public FieldComparator<?> getComparator(int numHits, boolean enableSkipping) {
4242
return new LatLonPointDistanceComparator(getField(), latitude, longitude, numHits);
4343
}
4444

lucene/core/src/java/org/apache/lucene/document/XYPointSortField.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ final class XYPointSortField extends SortField {
3535
}
3636

3737
@Override
38-
public FieldComparator<?> getComparator(int numHits, int sortPos) {
38+
public FieldComparator<?> getComparator(int numHits, boolean enableSkipping) {
3939
return new XYPointDistanceComparator(getField(), x, y, numHits);
4040
}
4141

lucene/core/src/java/org/apache/lucene/index/CheckIndex.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1107,7 +1107,7 @@ public static Status.IndexSortStatus testSort(
11071107

11081108
for (int i = 0; i < fields.length; i++) {
11091109
reverseMul[i] = fields[i].getReverse() ? -1 : 1;
1110-
comparators[i] = fields[i].getComparator(1, i).getLeafComparator(readerContext);
1110+
comparators[i] = fields[i].getComparator(1, false).getLeafComparator(readerContext);
11111111
}
11121112

11131113
int maxDoc = reader.maxDoc();

lucene/core/src/java/org/apache/lucene/search/DoubleValuesSource.java

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
import org.apache.lucene.index.IndexReader;
2626
import org.apache.lucene.index.LeafReaderContext;
2727
import org.apache.lucene.index.NumericDocValues;
28-
import org.apache.lucene.index.PointValues;
2928
import org.apache.lucene.search.comparators.DoubleComparator;
3029

3130
/**
@@ -483,8 +482,8 @@ void setMissingValue(double missingValue) {
483482

484483
@Override
485484
public FieldComparator<Double> newComparator(
486-
String fieldname, int numHits, int sortPos, boolean reversed) {
487-
return new DoubleComparator(numHits, fieldname, missingValue, reversed, sortPos) {
485+
String fieldname, int numHits, boolean enableSkipping, boolean reversed) {
486+
return new DoubleComparator(numHits, fieldname, missingValue, reversed, false) {
488487
@Override
489488
public LeafFieldComparator getLeafComparator(LeafReaderContext context) throws IOException {
490489
DoubleValuesHolder holder = new DoubleValuesHolder();
@@ -499,11 +498,6 @@ protected NumericDocValues getNumericDocValues(
499498
return asNumericDocValues(holder, Double::doubleToLongBits);
500499
}
501500

502-
@Override
503-
protected PointValues getPointValues(LeafReaderContext context, String field) {
504-
return null;
505-
}
506-
507501
@Override
508502
public void setScorer(Scorable scorer) throws IOException {
509503
holder.values = producer.getValues(ctx, fromScorer(scorer));

lucene/core/src/java/org/apache/lucene/search/FieldComparatorSource.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,5 +30,5 @@ public abstract class FieldComparatorSource {
3030
* @return FieldComparator.
3131
*/
3232
public abstract FieldComparator<?> newComparator(
33-
String fieldname, int numHits, int sortPos, boolean reversed);
33+
String fieldname, int numHits, boolean enableSkipping, boolean reversed);
3434
}

lucene/core/src/java/org/apache/lucene/search/FieldValueHitQueue.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ private FieldValueHitQueue(SortField[] fields, int size) {
134134
for (int i = 0; i < numComparators; ++i) {
135135
SortField field = fields[i];
136136
reverseMul[i] = field.reverse ? -1 : 1;
137-
comparators[i] = field.getComparator(size, i);
137+
comparators[i] = field.getComparator(size, i == 0);
138138
}
139139
}
140140

lucene/core/src/java/org/apache/lucene/search/LongValuesSource.java

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import org.apache.lucene.index.DocValues;
2323
import org.apache.lucene.index.LeafReaderContext;
2424
import org.apache.lucene.index.NumericDocValues;
25-
import org.apache.lucene.index.PointValues;
2625
import org.apache.lucene.search.comparators.LongComparator;
2726

2827
/**
@@ -328,8 +327,8 @@ void setMissingValue(long missingValue) {
328327

329328
@Override
330329
public FieldComparator<Long> newComparator(
331-
String fieldname, int numHits, int sortPos, boolean reversed) {
332-
return new LongComparator(numHits, fieldname, missingValue, reversed, sortPos) {
330+
String fieldname, int numHits, boolean enableSkipping, boolean reversed) {
331+
return new LongComparator(numHits, fieldname, missingValue, reversed, false) {
333332
@Override
334333
public LeafFieldComparator getLeafComparator(LeafReaderContext context) throws IOException {
335334
LongValuesHolder holder = new LongValuesHolder();
@@ -344,11 +343,6 @@ protected NumericDocValues getNumericDocValues(
344343
return asNumericDocValues(holder);
345344
}
346345

347-
@Override
348-
protected PointValues getPointValues(LeafReaderContext context, String field) {
349-
return null;
350-
}
351-
352346
@Override
353347
public void setScorer(Scorable scorer) throws IOException {
354348
holder.values = producer.getValues(ctx, DoubleValuesSource.fromScorer(scorer));

lucene/core/src/java/org/apache/lucene/search/SortField.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -495,44 +495,44 @@ public Comparator<BytesRef> getBytesComparator() {
495495
*
496496
* @lucene.experimental
497497
* @param numHits number of top hits the queue will store
498-
* @param sortPos position of this SortField within {@link Sort}. The comparator is primary if
499-
* sortPos==0, secondary if sortPos==1, etc. Some comparators can optimize themselves when
500-
* they are the primary sort.
498+
* @param enableSkipping true if the comparator can skip documents via {@link
499+
* LeafFieldComparator#competitiveIterator()}
501500
* @return {@link FieldComparator} to use when sorting
502501
*/
503-
public FieldComparator<?> getComparator(final int numHits, final int sortPos) {
502+
public FieldComparator<?> getComparator(final int numHits, boolean enableSkipping) {
504503
final FieldComparator<?> fieldComparator;
505504
switch (type) {
506505
case SCORE:
507506
fieldComparator = new FieldComparator.RelevanceComparator(numHits);
508507
break;
509508

510509
case DOC:
511-
fieldComparator = new DocComparator(numHits, reverse, sortPos);
510+
fieldComparator = new DocComparator(numHits, reverse, enableSkipping);
512511
break;
513512

514513
case INT:
515514
fieldComparator =
516-
new IntComparator(numHits, field, (Integer) missingValue, reverse, sortPos);
515+
new IntComparator(numHits, field, (Integer) missingValue, reverse, enableSkipping);
517516
break;
518517

519518
case FLOAT:
520519
fieldComparator =
521-
new FloatComparator(numHits, field, (Float) missingValue, reverse, sortPos);
520+
new FloatComparator(numHits, field, (Float) missingValue, reverse, enableSkipping);
522521
break;
523522

524523
case LONG:
525-
fieldComparator = new LongComparator(numHits, field, (Long) missingValue, reverse, sortPos);
524+
fieldComparator =
525+
new LongComparator(numHits, field, (Long) missingValue, reverse, enableSkipping);
526526
break;
527527

528528
case DOUBLE:
529529
fieldComparator =
530-
new DoubleComparator(numHits, field, (Double) missingValue, reverse, sortPos);
530+
new DoubleComparator(numHits, field, (Double) missingValue, reverse, enableSkipping);
531531
break;
532532

533533
case CUSTOM:
534534
assert comparatorSource != null;
535-
fieldComparator = comparatorSource.newComparator(field, numHits, sortPos, reverse);
535+
fieldComparator = comparatorSource.newComparator(field, numHits, enableSkipping, reverse);
536536
break;
537537

538538
case STRING:

0 commit comments

Comments
 (0)