Skip to content

Commit 9588697

Browse files
authored
ValuesSource refactoring: Wire up Avg aggregation (#52752)
1 parent b742a64 commit 9588697

File tree

3 files changed

+34
-5
lines changed

3 files changed

+34
-5
lines changed

server/src/main/java/org/elasticsearch/search/SearchModule.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -339,7 +339,8 @@ public Map<String, Highlighter> getHighlighters() {
339339

340340
private void registerAggregations(List<SearchPlugin> plugins) {
341341
registerAggregation(new AggregationSpec(AvgAggregationBuilder.NAME, AvgAggregationBuilder::new, AvgAggregationBuilder::parse)
342-
.addResultReader(InternalAvg::new));
342+
.addResultReader(InternalAvg::new)
343+
.setAggregatorRegistrar(AvgAggregationBuilder::registerAggregators));
343344
registerAggregation(new AggregationSpec(WeightedAvgAggregationBuilder.NAME, WeightedAvgAggregationBuilder::new,
344345
WeightedAvgAggregationBuilder::parse).addResultReader(InternalWeightedAvg::new));
345346
registerAggregation(new AggregationSpec(SumAggregationBuilder.NAME, SumAggregationBuilder::new, SumAggregationBuilder::parse)

server/src/main/java/org/elasticsearch/search/aggregations/metrics/AvgAggregationBuilder.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import org.elasticsearch.search.aggregations.support.ValuesSourceConfig;
3434
import org.elasticsearch.search.aggregations.support.ValuesSourceParserHelper;
3535
import org.elasticsearch.search.aggregations.support.CoreValuesSourceType;
36+
import org.elasticsearch.search.aggregations.support.ValuesSourceRegistry;
3637
import org.elasticsearch.search.aggregations.support.ValuesSourceType;
3738

3839
import java.io.IOException;
@@ -50,6 +51,10 @@ public static AggregationBuilder parse(String aggregationName, XContentParser pa
5051
return PARSER.parse(parser, aggregationName);
5152
}
5253

54+
public static void registerAggregators(ValuesSourceRegistry valuesSourceRegistry) {
55+
AvgAggregatorFactory.registerAggregators(valuesSourceRegistry);
56+
}
57+
5358
public AvgAggregationBuilder(String name) {
5459
super(name);
5560
}

server/src/main/java/org/elasticsearch/search/aggregations/metrics/AvgAggregatorFactory.java

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,19 @@
2020
package org.elasticsearch.search.aggregations.metrics;
2121

2222
import org.elasticsearch.index.query.QueryShardContext;
23+
import org.elasticsearch.search.DocValueFormat;
2324
import org.elasticsearch.search.aggregations.AggregationExecutionException;
2425
import org.elasticsearch.search.aggregations.Aggregator;
2526
import org.elasticsearch.search.aggregations.AggregatorFactories;
2627
import org.elasticsearch.search.aggregations.AggregatorFactory;
2728
import org.elasticsearch.search.aggregations.pipeline.PipelineAggregator;
29+
import org.elasticsearch.search.aggregations.support.AggregatorSupplier;
30+
import org.elasticsearch.search.aggregations.support.CoreValuesSourceType;
2831
import org.elasticsearch.search.aggregations.support.ValuesSource;
2932
import org.elasticsearch.search.aggregations.support.ValuesSource.Numeric;
3033
import org.elasticsearch.search.aggregations.support.ValuesSourceAggregatorFactory;
3134
import org.elasticsearch.search.aggregations.support.ValuesSourceConfig;
35+
import org.elasticsearch.search.aggregations.support.ValuesSourceRegistry;
3236
import org.elasticsearch.search.internal.SearchContext;
3337

3438
import java.io.IOException;
@@ -43,6 +47,22 @@ class AvgAggregatorFactory extends ValuesSourceAggregatorFactory {
4347
super(name, config, queryShardContext, parent, subFactoriesBuilder, metaData);
4448
}
4549

50+
static void registerAggregators(ValuesSourceRegistry valuesSourceRegistry) {
51+
valuesSourceRegistry.register(AvgAggregationBuilder.NAME,
52+
List.of(CoreValuesSourceType.NUMERIC, CoreValuesSourceType.DATE, CoreValuesSourceType.BOOLEAN),
53+
new MetricAggregatorSupplier() {
54+
@Override
55+
public Aggregator build(String name,
56+
ValuesSource valuesSource,
57+
DocValueFormat formatter,
58+
SearchContext context,
59+
Aggregator parent,
60+
List<PipelineAggregator> pipelineAggregators, Map<String, Object> metaData) throws IOException {
61+
return new AvgAggregator(name, (Numeric) valuesSource, formatter, context, parent, pipelineAggregators, metaData);
62+
}
63+
});
64+
}
65+
4666
@Override
4767
protected Aggregator createUnmapped(SearchContext searchContext,
4868
Aggregator parent,
@@ -58,11 +78,14 @@ protected Aggregator doCreateInternal(ValuesSource valuesSource,
5878
boolean collectsFromSingleBucket,
5979
List<PipelineAggregator> pipelineAggregators,
6080
Map<String, Object> metaData) throws IOException {
81+
AggregatorSupplier aggregatorSupplier = queryShardContext.getValuesSourceRegistry().getAggregator(config.valueSourceType(),
82+
AvgAggregationBuilder.NAME);
6183

62-
if (valuesSource instanceof Numeric == false) {
63-
throw new AggregationExecutionException("ValuesSource type " + valuesSource.toString() + "is not supported for aggregation " +
64-
this.name());
84+
if (aggregatorSupplier instanceof MetricAggregatorSupplier == false) {
85+
throw new AggregationExecutionException("Registry miss-match - expected MetricAggregatorSupplier, found [" +
86+
aggregatorSupplier.getClass().toString() + "]");
6587
}
66-
return new AvgAggregator(name, (Numeric) valuesSource, config.format(), searchContext, parent, pipelineAggregators, metaData);
88+
return ((MetricAggregatorSupplier) aggregatorSupplier).build(name, valuesSource, config.format(), searchContext, parent,
89+
pipelineAggregators, metaData);
6790
}
6891
}

0 commit comments

Comments
 (0)