Skip to content

Commit 7870c5c

Browse files
committed
HSEARCH-3661 Use SimpleCollectors to not recreate leaf collectors
1 parent 3607519 commit 7870c5c

File tree

16 files changed

+108
-126
lines changed

16 files changed

+108
-126
lines changed

backend/lucene/src/main/java/org/hibernate/search/backend/lucene/lowlevel/aggregation/collector/impl/AggregationFunctionCollector.java

Lines changed: 22 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,16 @@
1010
import org.hibernate.search.backend.lucene.lowlevel.docvalues.impl.LongMultiValuesSource;
1111

1212
import org.apache.lucene.index.LeafReaderContext;
13-
import org.apache.lucene.search.Collector;
14-
import org.apache.lucene.search.LeafCollector;
15-
import org.apache.lucene.search.Scorable;
1613
import org.apache.lucene.search.ScoreMode;
14+
import org.apache.lucene.search.SimpleCollector;
1715

18-
public class AggregationFunctionCollector<R extends AggregationFunction<?>> implements Collector {
16+
public class AggregationFunctionCollector<R extends AggregationFunction<?>> extends SimpleCollector {
1917

2018
private final LongMultiValuesSource valueSource;
2119
private final AggregationFunction<R> aggregationFunction;
2220

21+
private LongMultiValues values;
22+
2323
public AggregationFunctionCollector(LongMultiValuesSource valueSource, AggregationFunction<R> aggregationFunction) {
2424
this.valueSource = valueSource;
2525
this.aggregationFunction = aggregationFunction;
@@ -34,38 +34,31 @@ public Long result() {
3434
}
3535

3636
@Override
37-
public LeafCollector getLeafCollector(LeafReaderContext context) throws IOException {
38-
return new AggregationFunctionLeafCollector( valueSource.getValues( context ) );
37+
public void collect(int doc) throws IOException {
38+
if ( values.advanceExact( doc ) ) {
39+
while ( values.hasNextValue() ) {
40+
long value = values.nextValue();
41+
aggregationFunction.apply( value );
42+
if ( !aggregationFunction.acceptMultipleValues() ) {
43+
break;
44+
}
45+
}
46+
}
3947
}
4048

4149
@Override
4250
public ScoreMode scoreMode() {
4351
return ScoreMode.COMPLETE_NO_SCORES;
4452
}
4553

46-
public class AggregationFunctionLeafCollector implements LeafCollector {
47-
private final LongMultiValues values;
48-
49-
public AggregationFunctionLeafCollector(LongMultiValues values) {
50-
this.values = values;
51-
}
52-
53-
@Override
54-
public void collect(int doc) throws IOException {
55-
if ( values.advanceExact( doc ) ) {
56-
while ( values.hasNextValue() ) {
57-
long value = values.nextValue();
58-
aggregationFunction.apply( value );
59-
if ( !aggregationFunction.acceptMultipleValues() ) {
60-
break;
61-
}
62-
}
63-
}
64-
}
54+
@Override
55+
protected void doSetNextReader(LeafReaderContext context) throws IOException {
56+
values = valueSource.getValues( context );
57+
}
6558

66-
@Override
67-
public void setScorer(Scorable scorer) {
68-
// no-op by default
69-
}
59+
@Override
60+
public void finish() throws IOException {
61+
values = null;
7062
}
63+
7164
}

backend/lucene/src/main/java/org/hibernate/search/backend/lucene/lowlevel/aggregation/collector/impl/DoubleAggregationFunctionCollector.java

Lines changed: 19 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,17 @@
1111
import org.hibernate.search.backend.lucene.lowlevel.docvalues.impl.LongMultiValuesSource;
1212

1313
import org.apache.lucene.index.LeafReaderContext;
14-
import org.apache.lucene.search.Collector;
15-
import org.apache.lucene.search.LeafCollector;
16-
import org.apache.lucene.search.Scorable;
1714
import org.apache.lucene.search.ScoreMode;
15+
import org.apache.lucene.search.SimpleCollector;
1816

19-
public class DoubleAggregationFunctionCollector<AF extends DoubleAggregationFunction<?>> implements Collector {
17+
public class DoubleAggregationFunctionCollector<AF extends DoubleAggregationFunction<?>> extends SimpleCollector {
2018

2119
private final LongMultiValuesSource valueSource;
2220
private final DoubleAggregationFunction<AF> aggregationFunction;
2321
private final Function<Long, Double> longToDouble;
2422

23+
private LongMultiValues values;
24+
2525
public DoubleAggregationFunctionCollector(LongMultiValuesSource valueSource,
2626
DoubleAggregationFunction<AF> aggregationFunction, Function<Long, Double> longToDouble) {
2727
this.valueSource = valueSource;
@@ -38,35 +38,28 @@ public Double result() {
3838
}
3939

4040
@Override
41-
public LeafCollector getLeafCollector(LeafReaderContext context) throws IOException {
42-
return new AggregationFunctionLeafCollector( valueSource.getValues( context ) );
41+
public void collect(int doc) throws IOException {
42+
if ( values.advanceExact( doc ) ) {
43+
while ( values.hasNextValue() ) {
44+
long value = values.nextValue();
45+
aggregationFunction.apply( longToDouble.apply( value ) );
46+
}
47+
}
4348
}
4449

4550
@Override
4651
public ScoreMode scoreMode() {
4752
return ScoreMode.COMPLETE_NO_SCORES;
4853
}
4954

50-
public class AggregationFunctionLeafCollector implements LeafCollector {
51-
private final LongMultiValues values;
52-
53-
public AggregationFunctionLeafCollector(LongMultiValues values) {
54-
this.values = values;
55-
}
56-
57-
@Override
58-
public void collect(int doc) throws IOException {
59-
if ( values.advanceExact( doc ) ) {
60-
while ( values.hasNextValue() ) {
61-
long value = values.nextValue();
62-
aggregationFunction.apply( longToDouble.apply( value ) );
63-
}
64-
}
65-
}
55+
@Override
56+
protected void doSetNextReader(LeafReaderContext context) throws IOException {
57+
values = valueSource.getValues( context );
58+
}
6659

67-
@Override
68-
public void setScorer(Scorable scorer) {
69-
// no-op by default
70-
}
60+
@Override
61+
public void finish() throws IOException {
62+
values = null;
7163
}
64+
7265
}

backend/lucene/src/main/java/org/hibernate/search/backend/lucene/lowlevel/collector/impl/NumericTermsCollector.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ public ScoreMode scoreMode() {
9292
return ScoreMode.COMPLETE_NO_SCORES;
9393
}
9494

95+
@Override
9596
protected void doSetNextReader(LeafReaderContext context) throws IOException {
9697
this.values = valuesSource.getValues( context );
9798
this.leafReaderContext = context;
@@ -100,6 +101,7 @@ protected void doSetNextReader(LeafReaderContext context) throws IOException {
100101
}
101102
}
102103

104+
@Override
103105
public void finish() {
104106
values = null;
105107
}

backend/lucene/src/main/java/org/hibernate/search/backend/lucene/lowlevel/collector/impl/RangeCollector.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,7 @@ public ScoreMode scoreMode() {
207207
return ScoreMode.COMPLETE_NO_SCORES;
208208
}
209209

210+
@Override
210211
protected void doSetNextReader(LeafReaderContext context) throws IOException {
211212
values = valuesSource.getValues( context );
212213
for ( int i = 0; i < collectors.length; i++ ) {
@@ -216,6 +217,7 @@ protected void doSetNextReader(LeafReaderContext context) throws IOException {
216217
}
217218
}
218219

220+
@Override
219221
public void finish() throws IOException {
220222
values = null;
221223
}

backend/lucene/src/main/java/org/hibernate/search/backend/lucene/lowlevel/collector/impl/RangeCollectorFactory.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,12 @@
1313
import org.apache.lucene.search.Collector;
1414
import org.apache.lucene.search.CollectorManager;
1515

16-
public class RangeCollectorFactory<E extends Number>
17-
implements CollectorFactory<RangeCollector, RangeCollector, RangeCollectorManager<E>> {
16+
public class RangeCollectorFactory
17+
implements CollectorFactory<RangeCollector, RangeCollector, RangeCollectorManager> {
1818

19-
public static <E extends Number> CollectorFactory<RangeCollector, RangeCollector, RangeCollectorManager<E>> instance(
19+
public static CollectorFactory<RangeCollector, RangeCollector, RangeCollectorManager> instance(
2020
LongMultiValuesSource valuesSource, EffectiveRange[] ranges, List<CollectorFactory<?, ?, ?>> collectorFactories) {
21-
return new RangeCollectorFactory<>( valuesSource, ranges, collectorFactories );
21+
return new RangeCollectorFactory( valuesSource, ranges, collectorFactories );
2222
}
2323

2424
public final CollectorKey<RangeCollector, RangeCollector> key = CollectorKey.create();
@@ -35,7 +35,7 @@ public RangeCollectorFactory(LongMultiValuesSource valuesSource, EffectiveRange[
3535

3636
@SuppressWarnings({ "rawtypes", "unchecked" })
3737
@Override
38-
public RangeCollectorManager<E> createCollectorManager(CollectorExecutionContext context) throws IOException {
38+
public RangeCollectorManager createCollectorManager(CollectorExecutionContext context) throws IOException {
3939
Collector[][] collectors = new Collector[collectorFactories.size()][];
4040
CollectorKey<?, ?>[] keys = new CollectorKey<?, ?>[collectorFactories.size()];
4141
var managers = new CollectorManager[collectorFactories.size()];
@@ -51,7 +51,7 @@ public RangeCollectorManager<E> createCollectorManager(CollectorExecutionContext
5151
}
5252
index++;
5353
}
54-
return new RangeCollectorManager<>( valuesSource, ranges, collectors, keys, managers );
54+
return new RangeCollectorManager( valuesSource, ranges, collectors, keys, managers );
5555
}
5656

5757
@Override

backend/lucene/src/main/java/org/hibernate/search/backend/lucene/lowlevel/collector/impl/RangeCollectorManager.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
import org.apache.lucene.search.Collector;
1313
import org.apache.lucene.search.CollectorManager;
1414

15-
public class RangeCollectorManager<E extends Number> implements CollectorManager<RangeCollector, RangeCollector> {
15+
public class RangeCollectorManager implements CollectorManager<RangeCollector, RangeCollector> {
1616

1717
private final LongMultiValuesSource valuesSource;
1818
private final EffectiveRange[] ranges;

backend/lucene/src/main/java/org/hibernate/search/backend/lucene/lowlevel/collector/impl/TextTermsCollector.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,12 +109,14 @@ public ScoreMode scoreMode() {
109109
return ScoreMode.COMPLETE_NO_SCORES;
110110
}
111111

112+
@Override
112113
protected void doSetNextReader(LeafReaderContext context) throws IOException {
113114
initRootSortedSetDocValues( context );
114115
this.values = valuesSource.getValues( context );
115116
leafReaderContext = context;
116117
}
117118

119+
@Override
118120
public void finish() throws IOException {
119121
for ( LongObjectCursor<SegmentValue> value : segmentValues ) {
120122
long globalOrd = sortedSetValues.lookupTerm( values.lookupOrd( value.key ) );

backend/lucene/src/main/java/org/hibernate/search/backend/lucene/types/aggregation/impl/BucketOrder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ public <F, R> Comparator<Bucket<F, R>> toBucketComparator(Comparator<F> termAsce
8383
isTermOrderDescending() ? termAscendingComparator.reversed() : termAscendingComparator );
8484
}
8585

86-
public <E> Comparator<LongBucket> toLongBucketComparator() {
86+
public Comparator<LongBucket> toLongBucketComparator() {
8787
return toLongBucketComparatorInternal();
8888
}
8989

lucene-next/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/lowlevel/aggregation/collector/impl/AggregationFunctionCollector.java

Lines changed: 21 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,16 @@
1010
import org.hibernate.search.backend.lucene.lowlevel.docvalues.impl.LongMultiValuesSource;
1111

1212
import org.apache.lucene.index.LeafReaderContext;
13-
import org.apache.lucene.search.Collector;
14-
import org.apache.lucene.search.LeafCollector;
15-
import org.apache.lucene.search.Scorable;
1613
import org.apache.lucene.search.ScoreMode;
14+
import org.apache.lucene.search.SimpleCollector;
1715

18-
public class AggregationFunctionCollector<R extends AggregationFunction<?>> implements Collector {
16+
public class AggregationFunctionCollector<R extends AggregationFunction<?>> extends SimpleCollector {
1917

2018
private final LongMultiValuesSource valueSource;
2119
private final AggregationFunction<R> aggregationFunction;
2220

21+
private LongMultiValues values;
22+
2323
public AggregationFunctionCollector(LongMultiValuesSource valueSource, AggregationFunction<R> aggregationFunction) {
2424
this.valueSource = valueSource;
2525
this.aggregationFunction = aggregationFunction;
@@ -34,38 +34,30 @@ public Long result() {
3434
}
3535

3636
@Override
37-
public LeafCollector getLeafCollector(LeafReaderContext context) throws IOException {
38-
return new AggregationFunctionLeafCollector( valueSource.getValues( context ) );
37+
public void collect(int doc) throws IOException {
38+
if ( values.advanceExact( doc ) ) {
39+
while ( values.hasNextValue() ) {
40+
long value = values.nextValue();
41+
aggregationFunction.apply( value );
42+
if ( !aggregationFunction.acceptMultipleValues() ) {
43+
break;
44+
}
45+
}
46+
}
3947
}
4048

4149
@Override
4250
public ScoreMode scoreMode() {
4351
return ScoreMode.COMPLETE_NO_SCORES;
4452
}
4553

46-
public class AggregationFunctionLeafCollector implements LeafCollector {
47-
private final LongMultiValues values;
48-
49-
public AggregationFunctionLeafCollector(LongMultiValues values) {
50-
this.values = values;
51-
}
52-
53-
@Override
54-
public void collect(int doc) throws IOException {
55-
if ( values.advanceExact( doc ) ) {
56-
while ( values.hasNextValue() ) {
57-
long value = values.nextValue();
58-
aggregationFunction.apply( value );
59-
if ( !aggregationFunction.acceptMultipleValues() ) {
60-
break;
61-
}
62-
}
63-
}
64-
}
54+
@Override
55+
protected void doSetNextReader(LeafReaderContext context) throws IOException {
56+
values = valueSource.getValues( context );
57+
}
6558

66-
@Override
67-
public void setScorer(Scorable scorer) {
68-
// no-op by default
69-
}
59+
@Override
60+
public void finish() throws IOException {
61+
values = null;
7062
}
7163
}

lucene-next/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/lowlevel/aggregation/collector/impl/DoubleAggregationFunctionCollector.java

Lines changed: 18 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,17 @@
1111
import org.hibernate.search.backend.lucene.lowlevel.docvalues.impl.LongMultiValuesSource;
1212

1313
import org.apache.lucene.index.LeafReaderContext;
14-
import org.apache.lucene.search.Collector;
15-
import org.apache.lucene.search.LeafCollector;
16-
import org.apache.lucene.search.Scorable;
1714
import org.apache.lucene.search.ScoreMode;
15+
import org.apache.lucene.search.SimpleCollector;
1816

19-
public class DoubleAggregationFunctionCollector<AF extends DoubleAggregationFunction<?>> implements Collector {
17+
public class DoubleAggregationFunctionCollector<AF extends DoubleAggregationFunction<?>> extends SimpleCollector {
2018

2119
private final LongMultiValuesSource valueSource;
2220
private final DoubleAggregationFunction<AF> aggregationFunction;
2321
private final Function<Long, Double> longToDouble;
2422

23+
private LongMultiValues values;
24+
2525
public DoubleAggregationFunctionCollector(LongMultiValuesSource valueSource,
2626
DoubleAggregationFunction<AF> aggregationFunction, Function<Long, Double> longToDouble) {
2727
this.valueSource = valueSource;
@@ -38,35 +38,27 @@ public Double result() {
3838
}
3939

4040
@Override
41-
public LeafCollector getLeafCollector(LeafReaderContext context) throws IOException {
42-
return new AggregationFunctionLeafCollector( valueSource.getValues( context ) );
41+
public void collect(int doc) throws IOException {
42+
if ( values.advanceExact( doc ) ) {
43+
while ( values.hasNextValue() ) {
44+
long value = values.nextValue();
45+
aggregationFunction.apply( longToDouble.apply( value ) );
46+
}
47+
}
4348
}
4449

4550
@Override
4651
public ScoreMode scoreMode() {
4752
return ScoreMode.COMPLETE_NO_SCORES;
4853
}
4954

50-
public class AggregationFunctionLeafCollector implements LeafCollector {
51-
private final LongMultiValues values;
52-
53-
public AggregationFunctionLeafCollector(LongMultiValues values) {
54-
this.values = values;
55-
}
56-
57-
@Override
58-
public void collect(int doc) throws IOException {
59-
if ( values.advanceExact( doc ) ) {
60-
while ( values.hasNextValue() ) {
61-
long value = values.nextValue();
62-
aggregationFunction.apply( longToDouble.apply( value ) );
63-
}
64-
}
65-
}
55+
@Override
56+
protected void doSetNextReader(LeafReaderContext context) throws IOException {
57+
values = valueSource.getValues( context );
58+
}
6659

67-
@Override
68-
public void setScorer(Scorable scorer) {
69-
// no-op by default
70-
}
60+
@Override
61+
public void finish() throws IOException {
62+
values = null;
7163
}
7264
}

0 commit comments

Comments
 (0)