Skip to content

Commit 444f315

Browse files
committed
HSEARCH-5133 Push type-sel into each Lucene*Aggregation
1 parent 6d2e306 commit 444f315

File tree

5 files changed

+73
-28
lines changed

5 files changed

+73
-28
lines changed

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

Lines changed: 9 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import org.hibernate.search.engine.cfg.spi.NumberUtils;
2121
import org.hibernate.search.engine.search.aggregation.spi.FieldMetricAggregationBuilder;
2222
import org.hibernate.search.engine.search.common.ValueModel;
23-
import org.hibernate.search.util.common.AssertionFailure;
2423

2524
/**
2625
* @param <F> The type of field values.
@@ -93,19 +92,16 @@ public K extract(AggregationExtractContext context) {
9392
}
9493
}
9594

96-
protected static class TypeSelector<F> implements FieldMetricAggregationBuilder.TypeSelector {
97-
private final AbstractLuceneNumericFieldCodec<F, ?> codec;
98-
private final LuceneSearchIndexScope<?> scope;
99-
private final LuceneSearchIndexValueFieldContext<F> field;
100-
private final String operation;
95+
protected abstract static class TypeSelector<F> implements FieldMetricAggregationBuilder.TypeSelector {
96+
protected final AbstractLuceneNumericFieldCodec<F, ?> codec;
97+
protected final LuceneSearchIndexScope<?> scope;
98+
protected final LuceneSearchIndexValueFieldContext<F> field;
10199

102100
protected TypeSelector(AbstractLuceneNumericFieldCodec<F, ?> codec,
103-
LuceneSearchIndexScope<?> scope, LuceneSearchIndexValueFieldContext<F> field,
104-
String operation) {
101+
LuceneSearchIndexScope<?> scope, LuceneSearchIndexValueFieldContext<F> field) {
105102
this.codec = codec;
106103
this.scope = scope;
107104
this.field = field;
108-
this.operation = operation;
109105
}
110106

111107
@Override
@@ -118,22 +114,11 @@ protected TypeSelector(AbstractLuceneNumericFieldCodec<F, ?> codec,
118114
.withConvertedType( expectedType, field );
119115
}
120116

121-
if ( "sum".equals( operation ) ) {
122-
return new LuceneSumNumericFieldAggregation.Builder<>( codec, scope, field, projectionConverter );
123-
}
124-
else if ( "min".equals( operation ) ) {
125-
return new LuceneMinNumericFieldAggregation.Builder<>( codec, scope, field, projectionConverter );
126-
}
127-
else if ( "max".equals( operation ) ) {
128-
return new LuceneMaxNumericFieldAggregation.Builder<>( codec, scope, field, projectionConverter );
129-
}
130-
else if ( "avg".equals( operation ) ) {
131-
return new LuceneAvgNumericFieldAggregation.Builder<>( codec, scope, field, projectionConverter );
132-
}
133-
else {
134-
throw new AssertionFailure( "Aggregation operation not supported: " + operation );
135-
}
117+
return getFtBuilder( projectionConverter );
136118
}
119+
120+
protected abstract <T> Builder<F, ? extends Number, T> getFtBuilder(
121+
ProjectionConverter<F, ? extends T> projectionConverter);
137122
}
138123

139124
protected abstract static class Builder<F, E extends Number, K> extends AbstractBuilder<K>

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

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,22 @@ protected Factory(AbstractLuceneNumericFieldCodec<F, ?> codec) {
4848
@Override
4949
public FieldMetricAggregationBuilder.TypeSelector create(LuceneSearchIndexScope<?> scope,
5050
LuceneSearchIndexValueFieldContext<F> field) {
51-
return new TypeSelector<>( codec, scope, field, "avg" );
51+
return new FunctionTypeSelector<>( codec, scope, field );
52+
}
53+
}
54+
55+
protected static class FunctionTypeSelector<F> extends TypeSelector<F>
56+
implements FieldMetricAggregationBuilder.TypeSelector {
57+
58+
protected FunctionTypeSelector(AbstractLuceneNumericFieldCodec<F, ?> codec, LuceneSearchIndexScope<?> scope,
59+
LuceneSearchIndexValueFieldContext<F> field) {
60+
super( codec, scope, field );
61+
}
62+
63+
@Override
64+
protected <T> Builder<F, ? extends Number, T> getFtBuilder(
65+
ProjectionConverter<F, ? extends T> projectionConverter) {
66+
return new Builder<>( codec, scope, field, projectionConverter );
5267
}
5368
}
5469

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

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,22 @@ protected Factory(AbstractLuceneNumericFieldCodec<F, ?> codec) {
4444
@Override
4545
public FieldMetricAggregationBuilder.TypeSelector create(LuceneSearchIndexScope<?> scope,
4646
LuceneSearchIndexValueFieldContext<F> field) {
47-
return new TypeSelector<>( codec, scope, field, "max" );
47+
return new FunctionTypeSelector<>( codec, scope, field );
48+
}
49+
}
50+
51+
protected static class FunctionTypeSelector<F> extends TypeSelector<F>
52+
implements FieldMetricAggregationBuilder.TypeSelector {
53+
54+
protected FunctionTypeSelector(AbstractLuceneNumericFieldCodec<F, ?> codec, LuceneSearchIndexScope<?> scope,
55+
LuceneSearchIndexValueFieldContext<F> field) {
56+
super( codec, scope, field );
57+
}
58+
59+
@Override
60+
protected <T> Builder<F, ? extends Number, T> getFtBuilder(
61+
ProjectionConverter<F, ? extends T> projectionConverter) {
62+
return new Builder<>( codec, scope, field, projectionConverter );
4863
}
4964
}
5065

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

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,22 @@ protected Factory(AbstractLuceneNumericFieldCodec<F, ?> codec) {
4444
@Override
4545
public FieldMetricAggregationBuilder.TypeSelector create(LuceneSearchIndexScope<?> scope,
4646
LuceneSearchIndexValueFieldContext<F> field) {
47-
return new TypeSelector<>( codec, scope, field, "min" );
47+
return new FunctionTypeSelector<>( codec, scope, field );
48+
}
49+
}
50+
51+
protected static class FunctionTypeSelector<F> extends TypeSelector<F>
52+
implements FieldMetricAggregationBuilder.TypeSelector {
53+
54+
protected FunctionTypeSelector(AbstractLuceneNumericFieldCodec<F, ?> codec, LuceneSearchIndexScope<?> scope,
55+
LuceneSearchIndexValueFieldContext<F> field) {
56+
super( codec, scope, field );
57+
}
58+
59+
@Override
60+
protected <T> Builder<F, ? extends Number, T> getFtBuilder(
61+
ProjectionConverter<F, ? extends T> projectionConverter) {
62+
return new Builder<>( codec, scope, field, projectionConverter );
4863
}
4964
}
5065

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

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,22 @@ protected Factory(AbstractLuceneNumericFieldCodec<F, ?> codec) {
4444
@Override
4545
public FieldMetricAggregationBuilder.TypeSelector create(LuceneSearchIndexScope<?> scope,
4646
LuceneSearchIndexValueFieldContext<F> field) {
47-
return new TypeSelector<>( codec, scope, field, "sum" );
47+
return new FunctionTypeSelector<>( codec, scope, field );
48+
}
49+
}
50+
51+
protected static class FunctionTypeSelector<F> extends TypeSelector<F>
52+
implements FieldMetricAggregationBuilder.TypeSelector {
53+
54+
protected FunctionTypeSelector(AbstractLuceneNumericFieldCodec<F, ?> codec, LuceneSearchIndexScope<?> scope,
55+
LuceneSearchIndexValueFieldContext<F> field) {
56+
super( codec, scope, field );
57+
}
58+
59+
@Override
60+
protected <T> Builder<F, ? extends Number, T> getFtBuilder(
61+
ProjectionConverter<F, ? extends T> projectionConverter) {
62+
return new Builder<>( codec, scope, field, projectionConverter );
4863
}
4964
}
5065

0 commit comments

Comments
 (0)