From 6d2e3060c86cc8830afcd060691cbae67c517b20 Mon Sep 17 00:00:00 2001 From: Fabio Massimo Ercoli Date: Wed, 28 Aug 2024 09:56:19 +0200 Subject: [PATCH] HSEARCH-5133 Push factories into each Lucene*Aggregation --- ...LuceneMetricCompensatedSumAggregation.java | 24 ++------------ ...ctLuceneMetricNumericFieldAggregation.java | 24 ++------------ ...actLuceneMetricNumericLongAggregation.java | 33 ------------------- .../LuceneAvgCompensatedSumAggregation.java | 20 ++++++++++- .../LuceneAvgNumericFieldAggregation.java | 20 ++++++++++- ...neCountDistinctNumericLongAggregation.java | 19 ++++++++++- .../LuceneCountNumericLongAggregation.java | 19 ++++++++++- .../LuceneMaxNumericFieldAggregation.java | 20 ++++++++++- .../LuceneMinNumericFieldAggregation.java | 20 ++++++++++- .../LuceneSumCompensatedSumAggregation.java | 20 ++++++++++- .../LuceneSumNumericFieldAggregation.java | 20 ++++++++++- 11 files changed, 154 insertions(+), 85 deletions(-) diff --git a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/types/aggregation/impl/AbstractLuceneMetricCompensatedSumAggregation.java b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/types/aggregation/impl/AbstractLuceneMetricCompensatedSumAggregation.java index b8f10726550..feb1d25c2d9 100644 --- a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/types/aggregation/impl/AbstractLuceneMetricCompensatedSumAggregation.java +++ b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/types/aggregation/impl/AbstractLuceneMetricCompensatedSumAggregation.java @@ -12,7 +12,6 @@ import org.hibernate.search.backend.lucene.lowlevel.docvalues.impl.JoiningLongMultiValuesSource; import org.hibernate.search.backend.lucene.search.aggregation.impl.AggregationExtractContext; import org.hibernate.search.backend.lucene.search.aggregation.impl.AggregationRequestContext; -import org.hibernate.search.backend.lucene.search.common.impl.AbstractLuceneCodecAwareSearchQueryElementFactory; import org.hibernate.search.backend.lucene.search.common.impl.LuceneSearchIndexScope; import org.hibernate.search.backend.lucene.search.common.impl.LuceneSearchIndexValueFieldContext; import org.hibernate.search.backend.lucene.types.codec.impl.AbstractLuceneNumericFieldCodec; @@ -77,32 +76,13 @@ public K extract(AggregationExtractContext context) { abstract E extractEncoded(AggregationExtractContext context, LuceneNumericDomain numericDomain); - public static class Factory - extends AbstractLuceneCodecAwareSearchQueryElementFactory> { - - private final String operation; - - protected Factory(AbstractLuceneNumericFieldCodec codec, String operation) { - super( codec ); - this.operation = operation; - } - - @Override - public FieldMetricAggregationBuilder.TypeSelector create(LuceneSearchIndexScope scope, - LuceneSearchIndexValueFieldContext field) { - return new TypeSelector<>( codec, scope, field, operation ); - } - } - - private static class TypeSelector implements FieldMetricAggregationBuilder.TypeSelector { + protected static class TypeSelector implements FieldMetricAggregationBuilder.TypeSelector { private final AbstractLuceneNumericFieldCodec codec; private final LuceneSearchIndexScope scope; private final LuceneSearchIndexValueFieldContext field; private final String operation; - private TypeSelector(AbstractLuceneNumericFieldCodec codec, + protected TypeSelector(AbstractLuceneNumericFieldCodec codec, LuceneSearchIndexScope scope, LuceneSearchIndexValueFieldContext field, String operation) { this.codec = codec; diff --git a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/types/aggregation/impl/AbstractLuceneMetricNumericFieldAggregation.java b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/types/aggregation/impl/AbstractLuceneMetricNumericFieldAggregation.java index 9cc39ad74ba..c9423156a82 100644 --- a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/types/aggregation/impl/AbstractLuceneMetricNumericFieldAggregation.java +++ b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/types/aggregation/impl/AbstractLuceneMetricNumericFieldAggregation.java @@ -12,7 +12,6 @@ import org.hibernate.search.backend.lucene.lowlevel.docvalues.impl.JoiningLongMultiValuesSource; import org.hibernate.search.backend.lucene.search.aggregation.impl.AggregationExtractContext; import org.hibernate.search.backend.lucene.search.aggregation.impl.AggregationRequestContext; -import org.hibernate.search.backend.lucene.search.common.impl.AbstractLuceneCodecAwareSearchQueryElementFactory; import org.hibernate.search.backend.lucene.search.common.impl.LuceneSearchIndexScope; import org.hibernate.search.backend.lucene.search.common.impl.LuceneSearchIndexValueFieldContext; import org.hibernate.search.backend.lucene.types.codec.impl.AbstractLuceneNumericFieldCodec; @@ -94,32 +93,13 @@ public K extract(AggregationExtractContext context) { } } - public static class Factory - extends AbstractLuceneCodecAwareSearchQueryElementFactory> { - - private final String operation; - - protected Factory(AbstractLuceneNumericFieldCodec codec, String operation) { - super( codec ); - this.operation = operation; - } - - @Override - public FieldMetricAggregationBuilder.TypeSelector create(LuceneSearchIndexScope scope, - LuceneSearchIndexValueFieldContext field) { - return new TypeSelector<>( codec, scope, field, operation ); - } - } - - private static class TypeSelector implements FieldMetricAggregationBuilder.TypeSelector { + protected static class TypeSelector implements FieldMetricAggregationBuilder.TypeSelector { private final AbstractLuceneNumericFieldCodec codec; private final LuceneSearchIndexScope scope; private final LuceneSearchIndexValueFieldContext field; private final String operation; - private TypeSelector(AbstractLuceneNumericFieldCodec codec, + protected TypeSelector(AbstractLuceneNumericFieldCodec codec, LuceneSearchIndexScope scope, LuceneSearchIndexValueFieldContext field, String operation) { this.codec = codec; diff --git a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/types/aggregation/impl/AbstractLuceneMetricNumericLongAggregation.java b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/types/aggregation/impl/AbstractLuceneMetricNumericLongAggregation.java index 69bd35c0008..0e0c326fe22 100644 --- a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/types/aggregation/impl/AbstractLuceneMetricNumericLongAggregation.java +++ b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/types/aggregation/impl/AbstractLuceneMetricNumericLongAggregation.java @@ -10,12 +10,6 @@ import org.hibernate.search.backend.lucene.lowlevel.docvalues.impl.JoiningLongMultiValuesSource; import org.hibernate.search.backend.lucene.search.aggregation.impl.AggregationExtractContext; import org.hibernate.search.backend.lucene.search.aggregation.impl.AggregationRequestContext; -import org.hibernate.search.backend.lucene.search.common.impl.AbstractLuceneCodecAwareSearchQueryElementFactory; -import org.hibernate.search.backend.lucene.search.common.impl.LuceneSearchIndexScope; -import org.hibernate.search.backend.lucene.search.common.impl.LuceneSearchIndexValueFieldContext; -import org.hibernate.search.backend.lucene.types.codec.impl.AbstractLuceneNumericFieldCodec; -import org.hibernate.search.engine.search.aggregation.spi.FieldMetricAggregationBuilder; -import org.hibernate.search.util.common.AssertionFailure; public abstract class AbstractLuceneMetricNumericLongAggregation extends AbstractLuceneNestableAggregation { @@ -53,31 +47,4 @@ public Long extract(AggregationExtractContext context) { return context.getFacets( collectorKey ); } } - - public static class Factory - extends AbstractLuceneCodecAwareSearchQueryElementFactory, - F, - AbstractLuceneNumericFieldCodec> { - - private final String operation; - - protected Factory(AbstractLuceneNumericFieldCodec codec, String operation) { - super( codec ); - this.operation = operation; - } - - @Override - public FieldMetricAggregationBuilder create(LuceneSearchIndexScope scope, - LuceneSearchIndexValueFieldContext field) { - if ( "value_count".equals( operation ) ) { - return new LuceneCountNumericLongAggregation.Builder( scope, field ); - } - else if ( "cardinality".equals( operation ) ) { - return new LuceneCountDistinctNumericLongAggregation.Builder( scope, field ); - } - else { - throw new AssertionFailure( "Aggregation operation not supported: " + operation ); - } - } - } } diff --git a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/types/aggregation/impl/LuceneAvgCompensatedSumAggregation.java b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/types/aggregation/impl/LuceneAvgCompensatedSumAggregation.java index c46e6b8c9f2..38c24be6b8f 100644 --- a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/types/aggregation/impl/LuceneAvgCompensatedSumAggregation.java +++ b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/types/aggregation/impl/LuceneAvgCompensatedSumAggregation.java @@ -9,17 +9,19 @@ import org.hibernate.search.backend.lucene.lowlevel.docvalues.impl.JoiningLongMultiValuesSource; import org.hibernate.search.backend.lucene.search.aggregation.impl.AggregationExtractContext; import org.hibernate.search.backend.lucene.search.aggregation.impl.AggregationRequestContext; +import org.hibernate.search.backend.lucene.search.common.impl.AbstractLuceneCodecAwareSearchQueryElementFactory; import org.hibernate.search.backend.lucene.search.common.impl.LuceneSearchIndexScope; import org.hibernate.search.backend.lucene.search.common.impl.LuceneSearchIndexValueFieldContext; import org.hibernate.search.backend.lucene.types.codec.impl.AbstractLuceneNumericFieldCodec; import org.hibernate.search.backend.lucene.types.lowlevel.impl.LuceneNumericDomain; import org.hibernate.search.engine.backend.types.converter.spi.ProjectionConverter; +import org.hibernate.search.engine.search.aggregation.spi.FieldMetricAggregationBuilder; public class LuceneAvgCompensatedSumAggregation extends AbstractLuceneMetricCompensatedSumAggregation { public static Factory factory(AbstractLuceneNumericFieldCodec codec) { - return new Factory<>( codec, "avg" ); + return new Factory<>( codec ); } LuceneAvgCompensatedSumAggregation(Builder builder) { @@ -47,6 +49,22 @@ E extractEncoded(AggregationExtractContext context, LuceneNumericDomain numer return numericDomain.doubleToTerm( avg ); } + public static class Factory + extends AbstractLuceneCodecAwareSearchQueryElementFactory> { + + protected Factory(AbstractLuceneNumericFieldCodec codec) { + super( codec ); + } + + @Override + public FieldMetricAggregationBuilder.TypeSelector create(LuceneSearchIndexScope scope, + LuceneSearchIndexValueFieldContext field) { + return new TypeSelector<>( codec, scope, field, "avg" ); + } + } + protected static class Builder extends AbstractLuceneMetricCompensatedSumAggregation.Builder { diff --git a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/types/aggregation/impl/LuceneAvgNumericFieldAggregation.java b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/types/aggregation/impl/LuceneAvgNumericFieldAggregation.java index 2d3e440d167..12f1abe95e8 100644 --- a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/types/aggregation/impl/LuceneAvgNumericFieldAggregation.java +++ b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/types/aggregation/impl/LuceneAvgNumericFieldAggregation.java @@ -8,16 +8,18 @@ import org.hibernate.search.backend.lucene.lowlevel.aggregation.collector.impl.SumCollectorFactory; import org.hibernate.search.backend.lucene.lowlevel.docvalues.impl.JoiningLongMultiValuesSource; import org.hibernate.search.backend.lucene.search.aggregation.impl.AggregationRequestContext; +import org.hibernate.search.backend.lucene.search.common.impl.AbstractLuceneCodecAwareSearchQueryElementFactory; import org.hibernate.search.backend.lucene.search.common.impl.LuceneSearchIndexScope; import org.hibernate.search.backend.lucene.search.common.impl.LuceneSearchIndexValueFieldContext; import org.hibernate.search.backend.lucene.types.codec.impl.AbstractLuceneNumericFieldCodec; import org.hibernate.search.engine.backend.types.converter.spi.ProjectionConverter; +import org.hibernate.search.engine.search.aggregation.spi.FieldMetricAggregationBuilder; public class LuceneAvgNumericFieldAggregation extends AbstractLuceneMetricNumericFieldAggregation { public static Factory factory(AbstractLuceneNumericFieldCodec codec) { - return new Factory<>( codec, "avg" ); + return new Factory<>( codec ); } LuceneAvgNumericFieldAggregation(Builder builder) { @@ -34,6 +36,22 @@ void fillCollectors(JoiningLongMultiValuesSource source, AggregationRequestConte context.requireCollector( countCollectorFactory ); } + public static class Factory + extends AbstractLuceneCodecAwareSearchQueryElementFactory> { + + protected Factory(AbstractLuceneNumericFieldCodec codec) { + super( codec ); + } + + @Override + public FieldMetricAggregationBuilder.TypeSelector create(LuceneSearchIndexScope scope, + LuceneSearchIndexValueFieldContext field) { + return new TypeSelector<>( codec, scope, field, "avg" ); + } + } + protected static class Builder extends AbstractLuceneMetricNumericFieldAggregation.Builder { diff --git a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/types/aggregation/impl/LuceneCountDistinctNumericLongAggregation.java b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/types/aggregation/impl/LuceneCountDistinctNumericLongAggregation.java index 70bc81c1273..7e055d18150 100644 --- a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/types/aggregation/impl/LuceneCountDistinctNumericLongAggregation.java +++ b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/types/aggregation/impl/LuceneCountDistinctNumericLongAggregation.java @@ -7,6 +7,7 @@ import org.hibernate.search.backend.lucene.lowlevel.aggregation.collector.impl.CountDistinctCollectorFactory; import org.hibernate.search.backend.lucene.lowlevel.docvalues.impl.JoiningLongMultiValuesSource; import org.hibernate.search.backend.lucene.search.aggregation.impl.AggregationRequestContext; +import org.hibernate.search.backend.lucene.search.common.impl.AbstractLuceneCodecAwareSearchQueryElementFactory; import org.hibernate.search.backend.lucene.search.common.impl.LuceneSearchIndexScope; import org.hibernate.search.backend.lucene.search.common.impl.LuceneSearchIndexValueFieldContext; import org.hibernate.search.backend.lucene.types.codec.impl.AbstractLuceneNumericFieldCodec; @@ -15,7 +16,7 @@ public class LuceneCountDistinctNumericLongAggregation extends AbstractLuceneMetricNumericLongAggregation { public static Factory factory(AbstractLuceneNumericFieldCodec codec) { - return new Factory<>( codec, "cardinality" ); + return new Factory<>( codec ); } LuceneCountDistinctNumericLongAggregation(Builder builder) { @@ -29,6 +30,22 @@ void fillCollectors(JoiningLongMultiValuesSource source, AggregationRequestConte context.requireCollector( collectorFactory ); } + protected static class Factory + extends AbstractLuceneCodecAwareSearchQueryElementFactory, + F, + AbstractLuceneNumericFieldCodec> { + + protected Factory(AbstractLuceneNumericFieldCodec codec) { + super( codec ); + } + + @Override + public FieldMetricAggregationBuilder create(LuceneSearchIndexScope scope, + LuceneSearchIndexValueFieldContext field) { + return new Builder( scope, field ); + } + } + protected static class Builder extends AbstractBuilder implements FieldMetricAggregationBuilder { public Builder(LuceneSearchIndexScope scope, LuceneSearchIndexValueFieldContext field) { super( scope, field ); diff --git a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/types/aggregation/impl/LuceneCountNumericLongAggregation.java b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/types/aggregation/impl/LuceneCountNumericLongAggregation.java index 2c0c2977bb9..7369a8fd21c 100644 --- a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/types/aggregation/impl/LuceneCountNumericLongAggregation.java +++ b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/types/aggregation/impl/LuceneCountNumericLongAggregation.java @@ -7,6 +7,7 @@ import org.hibernate.search.backend.lucene.lowlevel.aggregation.collector.impl.CountCollectorFactory; import org.hibernate.search.backend.lucene.lowlevel.docvalues.impl.JoiningLongMultiValuesSource; import org.hibernate.search.backend.lucene.search.aggregation.impl.AggregationRequestContext; +import org.hibernate.search.backend.lucene.search.common.impl.AbstractLuceneCodecAwareSearchQueryElementFactory; import org.hibernate.search.backend.lucene.search.common.impl.LuceneSearchIndexScope; import org.hibernate.search.backend.lucene.search.common.impl.LuceneSearchIndexValueFieldContext; import org.hibernate.search.backend.lucene.types.codec.impl.AbstractLuceneNumericFieldCodec; @@ -15,7 +16,7 @@ public class LuceneCountNumericLongAggregation extends AbstractLuceneMetricNumericLongAggregation { public static Factory factory(AbstractLuceneNumericFieldCodec codec) { - return new Factory<>( codec, "value_count" ); + return new Factory<>( codec ); } LuceneCountNumericLongAggregation(Builder builder) { @@ -29,6 +30,22 @@ void fillCollectors(JoiningLongMultiValuesSource source, AggregationRequestConte context.requireCollector( collectorFactory ); } + protected static class Factory + extends AbstractLuceneCodecAwareSearchQueryElementFactory, + F, + AbstractLuceneNumericFieldCodec> { + + protected Factory(AbstractLuceneNumericFieldCodec codec) { + super( codec ); + } + + @Override + public FieldMetricAggregationBuilder create(LuceneSearchIndexScope scope, + LuceneSearchIndexValueFieldContext field) { + return new Builder( scope, field ); + } + } + protected static class Builder extends AbstractBuilder implements FieldMetricAggregationBuilder { public Builder(LuceneSearchIndexScope scope, LuceneSearchIndexValueFieldContext field) { super( scope, field ); diff --git a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/types/aggregation/impl/LuceneMaxNumericFieldAggregation.java b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/types/aggregation/impl/LuceneMaxNumericFieldAggregation.java index b9130e2bb75..54f36b8e0fa 100644 --- a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/types/aggregation/impl/LuceneMaxNumericFieldAggregation.java +++ b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/types/aggregation/impl/LuceneMaxNumericFieldAggregation.java @@ -7,16 +7,18 @@ import org.hibernate.search.backend.lucene.lowlevel.aggregation.collector.impl.MaxCollectorFactory; import org.hibernate.search.backend.lucene.lowlevel.docvalues.impl.JoiningLongMultiValuesSource; import org.hibernate.search.backend.lucene.search.aggregation.impl.AggregationRequestContext; +import org.hibernate.search.backend.lucene.search.common.impl.AbstractLuceneCodecAwareSearchQueryElementFactory; import org.hibernate.search.backend.lucene.search.common.impl.LuceneSearchIndexScope; import org.hibernate.search.backend.lucene.search.common.impl.LuceneSearchIndexValueFieldContext; import org.hibernate.search.backend.lucene.types.codec.impl.AbstractLuceneNumericFieldCodec; import org.hibernate.search.engine.backend.types.converter.spi.ProjectionConverter; +import org.hibernate.search.engine.search.aggregation.spi.FieldMetricAggregationBuilder; public class LuceneMaxNumericFieldAggregation extends AbstractLuceneMetricNumericFieldAggregation { public static Factory factory(AbstractLuceneNumericFieldCodec codec) { - return new Factory<>( codec, "max" ); + return new Factory<>( codec ); } LuceneMaxNumericFieldAggregation(Builder builder) { @@ -30,6 +32,22 @@ void fillCollectors(JoiningLongMultiValuesSource source, AggregationRequestConte context.requireCollector( collectorFactory ); } + public static class Factory + extends AbstractLuceneCodecAwareSearchQueryElementFactory> { + + protected Factory(AbstractLuceneNumericFieldCodec codec) { + super( codec ); + } + + @Override + public FieldMetricAggregationBuilder.TypeSelector create(LuceneSearchIndexScope scope, + LuceneSearchIndexValueFieldContext field) { + return new TypeSelector<>( codec, scope, field, "max" ); + } + } + protected static class Builder extends AbstractLuceneMetricNumericFieldAggregation.Builder { diff --git a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/types/aggregation/impl/LuceneMinNumericFieldAggregation.java b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/types/aggregation/impl/LuceneMinNumericFieldAggregation.java index e01fd7b6ddf..458c3c504bd 100644 --- a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/types/aggregation/impl/LuceneMinNumericFieldAggregation.java +++ b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/types/aggregation/impl/LuceneMinNumericFieldAggregation.java @@ -7,16 +7,18 @@ import org.hibernate.search.backend.lucene.lowlevel.aggregation.collector.impl.MinCollectorFactory; import org.hibernate.search.backend.lucene.lowlevel.docvalues.impl.JoiningLongMultiValuesSource; import org.hibernate.search.backend.lucene.search.aggregation.impl.AggregationRequestContext; +import org.hibernate.search.backend.lucene.search.common.impl.AbstractLuceneCodecAwareSearchQueryElementFactory; import org.hibernate.search.backend.lucene.search.common.impl.LuceneSearchIndexScope; import org.hibernate.search.backend.lucene.search.common.impl.LuceneSearchIndexValueFieldContext; import org.hibernate.search.backend.lucene.types.codec.impl.AbstractLuceneNumericFieldCodec; import org.hibernate.search.engine.backend.types.converter.spi.ProjectionConverter; +import org.hibernate.search.engine.search.aggregation.spi.FieldMetricAggregationBuilder; public class LuceneMinNumericFieldAggregation extends AbstractLuceneMetricNumericFieldAggregation { public static Factory factory(AbstractLuceneNumericFieldCodec codec) { - return new Factory<>( codec, "min" ); + return new Factory<>( codec ); } LuceneMinNumericFieldAggregation(Builder builder) { @@ -30,6 +32,22 @@ void fillCollectors(JoiningLongMultiValuesSource source, AggregationRequestConte context.requireCollector( collectorFactory ); } + public static class Factory + extends AbstractLuceneCodecAwareSearchQueryElementFactory> { + + protected Factory(AbstractLuceneNumericFieldCodec codec) { + super( codec ); + } + + @Override + public FieldMetricAggregationBuilder.TypeSelector create(LuceneSearchIndexScope scope, + LuceneSearchIndexValueFieldContext field) { + return new TypeSelector<>( codec, scope, field, "min" ); + } + } + protected static class Builder extends AbstractLuceneMetricNumericFieldAggregation.Builder { diff --git a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/types/aggregation/impl/LuceneSumCompensatedSumAggregation.java b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/types/aggregation/impl/LuceneSumCompensatedSumAggregation.java index aaacaa7b6d2..b5c49605389 100644 --- a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/types/aggregation/impl/LuceneSumCompensatedSumAggregation.java +++ b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/types/aggregation/impl/LuceneSumCompensatedSumAggregation.java @@ -8,17 +8,19 @@ import org.hibernate.search.backend.lucene.lowlevel.docvalues.impl.JoiningLongMultiValuesSource; import org.hibernate.search.backend.lucene.search.aggregation.impl.AggregationExtractContext; import org.hibernate.search.backend.lucene.search.aggregation.impl.AggregationRequestContext; +import org.hibernate.search.backend.lucene.search.common.impl.AbstractLuceneCodecAwareSearchQueryElementFactory; import org.hibernate.search.backend.lucene.search.common.impl.LuceneSearchIndexScope; import org.hibernate.search.backend.lucene.search.common.impl.LuceneSearchIndexValueFieldContext; import org.hibernate.search.backend.lucene.types.codec.impl.AbstractLuceneNumericFieldCodec; import org.hibernate.search.backend.lucene.types.lowlevel.impl.LuceneNumericDomain; import org.hibernate.search.engine.backend.types.converter.spi.ProjectionConverter; +import org.hibernate.search.engine.search.aggregation.spi.FieldMetricAggregationBuilder; public class LuceneSumCompensatedSumAggregation extends AbstractLuceneMetricCompensatedSumAggregation { public static Factory factory(AbstractLuceneNumericFieldCodec codec) { - return new Factory<>( codec, "sum" ); + return new Factory<>( codec ); } LuceneSumCompensatedSumAggregation(Builder builder) { @@ -40,6 +42,22 @@ E extractEncoded(AggregationExtractContext context, LuceneNumericDomain numer return numericDomain.doubleToTerm( sum ); } + public static class Factory + extends AbstractLuceneCodecAwareSearchQueryElementFactory> { + + protected Factory(AbstractLuceneNumericFieldCodec codec) { + super( codec ); + } + + @Override + public FieldMetricAggregationBuilder.TypeSelector create(LuceneSearchIndexScope scope, + LuceneSearchIndexValueFieldContext field) { + return new TypeSelector<>( codec, scope, field, "sum" ); + } + } + protected static class Builder extends AbstractLuceneMetricCompensatedSumAggregation.Builder { diff --git a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/types/aggregation/impl/LuceneSumNumericFieldAggregation.java b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/types/aggregation/impl/LuceneSumNumericFieldAggregation.java index afadc9c29e5..f2a7e1c715c 100644 --- a/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/types/aggregation/impl/LuceneSumNumericFieldAggregation.java +++ b/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/types/aggregation/impl/LuceneSumNumericFieldAggregation.java @@ -7,16 +7,18 @@ import org.hibernate.search.backend.lucene.lowlevel.aggregation.collector.impl.SumCollectorFactory; import org.hibernate.search.backend.lucene.lowlevel.docvalues.impl.JoiningLongMultiValuesSource; import org.hibernate.search.backend.lucene.search.aggregation.impl.AggregationRequestContext; +import org.hibernate.search.backend.lucene.search.common.impl.AbstractLuceneCodecAwareSearchQueryElementFactory; import org.hibernate.search.backend.lucene.search.common.impl.LuceneSearchIndexScope; import org.hibernate.search.backend.lucene.search.common.impl.LuceneSearchIndexValueFieldContext; import org.hibernate.search.backend.lucene.types.codec.impl.AbstractLuceneNumericFieldCodec; import org.hibernate.search.engine.backend.types.converter.spi.ProjectionConverter; +import org.hibernate.search.engine.search.aggregation.spi.FieldMetricAggregationBuilder; public class LuceneSumNumericFieldAggregation extends AbstractLuceneMetricNumericFieldAggregation { public static Factory factory(AbstractLuceneNumericFieldCodec codec) { - return new Factory<>( codec, "sum" ); + return new Factory<>( codec ); } LuceneSumNumericFieldAggregation(Builder builder) { @@ -30,6 +32,22 @@ void fillCollectors(JoiningLongMultiValuesSource source, AggregationRequestConte context.requireCollector( collectorFactory ); } + public static class Factory + extends AbstractLuceneCodecAwareSearchQueryElementFactory> { + + protected Factory(AbstractLuceneNumericFieldCodec codec) { + super( codec ); + } + + @Override + public FieldMetricAggregationBuilder.TypeSelector create(LuceneSearchIndexScope scope, + LuceneSearchIndexValueFieldContext field) { + return new TypeSelector<>( codec, scope, field, "sum" ); + } + } + protected static class Builder extends AbstractLuceneMetricNumericFieldAggregation.Builder {