Skip to content

Commit 52de1e8

Browse files
authored
Wire PercentileRanks aggregator into new VS framework (#51693)
1 parent 9588697 commit 52de1e8

File tree

3 files changed

+37
-2
lines changed

3 files changed

+37
-2
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
@@ -369,7 +369,8 @@ private void registerAggregations(List<SearchPlugin> plugins) {
369369
registerAggregation(new AggregationSpec(PercentileRanksAggregationBuilder.NAME, PercentileRanksAggregationBuilder::new,
370370
PercentileRanksAggregationBuilder::parse)
371371
.addResultReader(InternalTDigestPercentileRanks.NAME, InternalTDigestPercentileRanks::new)
372-
.addResultReader(InternalHDRPercentileRanks.NAME, InternalHDRPercentileRanks::new));
372+
.addResultReader(InternalHDRPercentileRanks.NAME, InternalHDRPercentileRanks::new)
373+
.setAggregatorRegistrar(PercentileRanksAggregationBuilder::registerAggregators));
373374
registerAggregation(new AggregationSpec(MedianAbsoluteDeviationAggregationBuilder.NAME,
374375
MedianAbsoluteDeviationAggregationBuilder::new, MedianAbsoluteDeviationAggregationBuilder::parse)
375376
.addResultReader(InternalMedianAbsoluteDeviation::new)

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import org.elasticsearch.search.aggregations.support.CoreValuesSourceType;
3131
import org.elasticsearch.search.aggregations.support.ValuesSourceAggregatorFactory;
3232
import org.elasticsearch.search.aggregations.support.ValuesSourceConfig;
33+
import org.elasticsearch.search.aggregations.support.ValuesSourceRegistry;
3334
import org.elasticsearch.search.aggregations.support.ValuesSourceType;
3435

3536
import java.io.IOException;
@@ -52,6 +53,10 @@ public static AggregationBuilder parse(String aggregationName, XContentParser pa
5253
return PARSER.parse(parser, aggregationName);
5354
}
5455

56+
public static void registerAggregators(ValuesSourceRegistry valuesSourceRegistry) {
57+
PercentileRanksAggregatorFactory.registerAggregators(valuesSourceRegistry);
58+
}
59+
5560
public PercentileRanksAggregationBuilder(String name, double[] values) {
5661
this(name, values, null);
5762
}

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

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,18 @@
2020
package org.elasticsearch.search.aggregations.metrics;
2121

2222
import org.elasticsearch.index.query.QueryShardContext;
23+
import org.elasticsearch.search.DocValueFormat;
24+
import org.elasticsearch.search.aggregations.AggregationExecutionException;
2325
import org.elasticsearch.search.aggregations.Aggregator;
2426
import org.elasticsearch.search.aggregations.AggregatorFactories;
2527
import org.elasticsearch.search.aggregations.AggregatorFactory;
2628
import org.elasticsearch.search.aggregations.pipeline.PipelineAggregator;
29+
import org.elasticsearch.search.aggregations.support.AggregatorSupplier;
30+
import org.elasticsearch.search.aggregations.support.CoreValuesSourceType;
2731
import org.elasticsearch.search.aggregations.support.ValuesSource;
2832
import org.elasticsearch.search.aggregations.support.ValuesSourceAggregatorFactory;
2933
import org.elasticsearch.search.aggregations.support.ValuesSourceConfig;
34+
import org.elasticsearch.search.aggregations.support.ValuesSourceRegistry;
3035
import org.elasticsearch.search.internal.SearchContext;
3136

3237
import java.io.IOException;
@@ -39,6 +44,22 @@ class PercentileRanksAggregatorFactory extends ValuesSourceAggregatorFactory {
3944
private final PercentilesConfig percentilesConfig;
4045
private final boolean keyed;
4146

47+
static void registerAggregators(ValuesSourceRegistry valuesSourceRegistry) {
48+
valuesSourceRegistry.register(PercentileRanksAggregationBuilder.NAME,
49+
List.of(CoreValuesSourceType.NUMERIC, CoreValuesSourceType.HISTOGRAM, CoreValuesSourceType.DATE, CoreValuesSourceType.BOOLEAN),
50+
new PercentilesAggregatorSupplier() {
51+
@Override
52+
public Aggregator build(String name, ValuesSource valuesSource, SearchContext context, Aggregator parent,
53+
double[] percents, PercentilesConfig percentilesConfig, boolean keyed, DocValueFormat formatter,
54+
List<PipelineAggregator> pipelineAggregators, Map<String, Object> metaData) throws IOException {
55+
56+
return percentilesConfig.createPercentileRanksAggregator(name, valuesSource, context, parent, percents, keyed,
57+
formatter, pipelineAggregators, metaData);
58+
}
59+
}
60+
);
61+
}
62+
4263
PercentileRanksAggregatorFactory(String name,
4364
ValuesSourceConfig config,
4465
double[] percents,
@@ -71,7 +92,15 @@ protected Aggregator doCreateInternal(ValuesSource valuesSource,
7192
boolean collectsFromSingleBucket,
7293
List<PipelineAggregator> pipelineAggregators,
7394
Map<String, Object> metaData) throws IOException {
74-
return percentilesConfig.createPercentileRanksAggregator(name, valuesSource, searchContext, parent, percents, keyed,
95+
AggregatorSupplier aggregatorSupplier = queryShardContext.getValuesSourceRegistry().getAggregator(config.valueSourceType(),
96+
PercentileRanksAggregationBuilder.NAME);
97+
98+
if (aggregatorSupplier instanceof PercentilesAggregatorSupplier == false) {
99+
throw new AggregationExecutionException("Registry miss-match - expected PercentilesAggregatorSupplier, found [" +
100+
aggregatorSupplier.getClass().toString() + "]");
101+
}
102+
PercentilesAggregatorSupplier percentilesAggregatorSupplier = (PercentilesAggregatorSupplier) aggregatorSupplier;
103+
return percentilesAggregatorSupplier.build(name, valuesSource, searchContext, parent, percents, percentilesConfig, keyed,
75104
config.format(), pipelineAggregators, metaData);
76105
}
77106
}

0 commit comments

Comments
 (0)