Skip to content

Introduce ValuesSource Registry & Refactor Aggregation Type System #54281

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 65 commits into from
Mar 26, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
65 commits
Select commit Hold shift + click to select a range
db9f53f
Remove ValuesSourceType argument to ValuesSourceAggregationBuilder (#…
not-napoleon Oct 31, 2019
8ac8731
Merge branch 'master' into feature/extensible-values-source
not-napoleon Oct 31, 2019
7c59324
Merge branch 'master' into feature/extensible-values-source
not-napoleon Nov 14, 2019
1a76ff9
Merge branch 'master' into feature/extensible-values-source
not-napoleon Nov 18, 2019
750b234
Merge branch 'master' into feature/extensible-values-source
not-napoleon Nov 19, 2019
fc3509c
Merge branch 'master' into feature/extensible-values-source
not-napoleon Nov 25, 2019
0331312
ValuesSourceRegistry Prototype (#48758)
not-napoleon Nov 25, 2019
60b7ae7
Remove generics from ValuesSource related classes (#49606)
not-napoleon Dec 2, 2019
b0e1efe
Merge branch 'master' into feature/extensible-values-source
not-napoleon Dec 12, 2019
538bae1
Merge branch 'master' into feature/extensible-values-source
not-napoleon Jan 7, 2020
f9e5255
fix percentile aggregation tests (#50712)
not-napoleon Jan 8, 2020
2aeaedb
Merge branch 'master' into feature/extensible-values-source
not-napoleon Jan 10, 2020
5757912
Basic thread safety for ValuesSourceRegistry (#50340)
not-napoleon Jan 10, 2020
c44db79
Remove target value type from ValuesSourceAggregationBuilder (#49943)
not-napoleon Jan 13, 2020
82590a7
Merge branch 'master' into feature/extensible-values-source
not-napoleon Jan 14, 2020
41503f8
Merge branch 'master' into feature/extensible-values-source
not-napoleon Jan 16, 2020
3759d6f
Merge branch 'master' into feature/extensible-values-source
not-napoleon Jan 16, 2020
e0d4e8f
Cleanup default values source type (#50992)
not-napoleon Jan 21, 2020
4e44149
Merge branch 'master' into feature/extensible-values-source
not-napoleon Jan 22, 2020
98d5b22
CoreValuesSourceType no longer implements Writable (#51276)
not-napoleon Jan 22, 2020
1276d73
Remove genereics & hard coded ValuesSource references from Matrix Sta…
not-napoleon Jan 22, 2020
64ba8a9
Put values source types on fields (#51503)
not-napoleon Jan 28, 2020
b36c79b
Remove VST Any (#51539)
not-napoleon Jan 28, 2020
02c82d8
Rewire terms agg to use new VS registry (#51182)
polyfractal Jan 29, 2020
a8a35dc
Wire Cardinality aggregation to work with the ValuesSourceRegistry (#…
not-napoleon Jan 30, 2020
362d6fa
Merge branch 'master' into feature/extensible-values-source
not-napoleon Jan 31, 2020
2466938
Wire Percentiles aggregator into new VS framework (#51639)
polyfractal Jan 31, 2020
369ad60
Remove generics and target value type from MultiVSAB (#51647)
not-napoleon Feb 5, 2020
91bbb5f
Merge branch 'master' into feature/extensible-values-source
not-napoleon Feb 5, 2020
b33baec
fix checkstyle after merge (#52008)
not-napoleon Feb 7, 2020
af5f319
Merge branch 'master' into feature/extensible-values-source
not-napoleon Feb 7, 2020
77b87a1
Plumb ValuesSourceRegistry through to QuerySearchContext (#51710)
not-napoleon Feb 7, 2020
22397e0
Merge remote-tracking branch 'origin/master' into feature/extensible-…
polyfractal Feb 11, 2020
d0eea4e
Merge branch 'master' into feature/extensible-values-source
not-napoleon Feb 19, 2020
a79bc73
Merge branch 'master' into feature/extensible-values-source
not-napoleon Feb 24, 2020
d6caf2d
Convert RareTerms to new VS registry (#52166)
polyfractal Feb 24, 2020
e567ecb
Wire up Value Count (#52225)
not-napoleon Feb 24, 2020
8fbff73
Wire up Max & Min aggregations (#52219)
not-napoleon Feb 24, 2020
24ca419
Merge remote-tracking branch 'origin/master' into feature/extensible-…
polyfractal Feb 24, 2020
59ae37a
ValuesSource refactoring: Wire up Sum aggregation (#52571)
csoulios Feb 25, 2020
9df4ee6
ValuesSource refactoring: Wire up SigTerms aggregation (#52590)
polyfractal Feb 25, 2020
678164b
Soft immutability for VSConfig (#52729)
not-napoleon Feb 26, 2020
898fc70
Unmute testSupportedFieldTypes, fix Percentiles/Ranks/Terms tests (#5…
polyfractal Feb 26, 2020
3dea0e6
VS refactoring: Wire up stats aggregation (#52891)
csoulios Feb 27, 2020
d434a9d
ValuesSource refactoring: Wire up string_stats aggregation (#52875)
csoulios Feb 27, 2020
0e79fd5
Merge remote-tracking branch 'origin/master' into feature/extensible-…
polyfractal Feb 28, 2020
d961faa
VS refactoring: Wire up median (MAD) aggregation (#52945)
csoulios Feb 28, 2020
f2474a4
Merge branch 'master' into feature/extensible-values-source
not-napoleon Mar 2, 2020
b742a64
fix valuesourcetype issue with constant_keyword field (#53041)
talevy Mar 3, 2020
9588697
ValuesSource refactoring: Wire up Avg aggregation (#52752)
csoulios Mar 3, 2020
52de1e8
Wire PercentileRanks aggregator into new VS framework (#51693)
polyfractal Mar 3, 2020
33fc002
Add a VSConfig resolver for aggregations not using the registry (#53038)
not-napoleon Mar 4, 2020
29463c4
Vs refactor wire up ranges and date ranges (#52918)
not-napoleon Mar 4, 2020
5ae3f19
Wire up geo_bounds aggregation to ValuesSourceRegistry (#53034)
talevy Mar 5, 2020
9923466
VS refactoring: convert Boxplot to new registry (#53132)
polyfractal Mar 5, 2020
3a2818d
Merge remote-tracking branch 'elastic/master' into feature/extensible…
talevy Mar 6, 2020
7ed6a7e
Wire-up geotile_grid and geohash_grid to ValuesSourceRegistry (#53037)
talevy Mar 9, 2020
08c242d
Wire-up geo_centroid agg to ValuesSourceRegistry (#53040)
talevy Mar 9, 2020
6636402
Merge remote-tracking branch 'origin/master' into feature/extensible-…
polyfractal Mar 9, 2020
5960eed
Merge branch 'master' into feature/extensible-values-source
not-napoleon Mar 12, 2020
64d5c84
Fix type tests for Missing aggregation (#53501)
not-napoleon Mar 12, 2020
ba2210e
ValuesSource Refactor: move histo VSType into XPack module (#53298)
polyfractal Mar 12, 2020
52214eb
Wire up DateHistogram to the ValuesSourceRegistry (#53484)
not-napoleon Mar 12, 2020
e30dd36
Vs refactor parser cleanup (#53198)
not-napoleon Mar 13, 2020
cacf0a6
Merge branch 'master' into experiment5
not-napoleon Mar 26, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,10 @@
import org.elasticsearch.search.aggregations.AggregatorFactories.Builder;
import org.elasticsearch.search.aggregations.AggregatorFactory;
import org.elasticsearch.search.aggregations.support.CoreValuesSourceType;
import org.elasticsearch.search.aggregations.support.ValueType;
import org.elasticsearch.search.aggregations.support.ValuesSource;
import org.elasticsearch.search.aggregations.support.ValuesSource.Bytes;
import org.elasticsearch.search.aggregations.support.ValuesSourceAggregationBuilder;
import org.elasticsearch.search.aggregations.support.ValuesSourceAggregatorFactory;
import org.elasticsearch.search.aggregations.support.ValuesSourceConfig;
import org.elasticsearch.search.aggregations.support.ValuesSourceType;
import org.elasticsearch.search.builder.SearchSourceBuilder;

import java.io.IOException;
Expand All @@ -52,14 +50,14 @@
* {@linkplain AggregationBuilder#rewrite(QueryRewriteContext)}, or
* {@linkplain AbstractAggregationBuilder#build(QueryShardContext, AggregatorFactory)}.
*/
public class StringStatsAggregationBuilder extends ValuesSourceAggregationBuilder<ValuesSource.Bytes, StringStatsAggregationBuilder> {
public class StringStatsAggregationBuilder extends ValuesSourceAggregationBuilder<StringStatsAggregationBuilder> {
public static final String NAME = "string_stats";
private static final ParseField SHOW_DISTRIBUTION_FIELD = new ParseField("show_distribution");

private boolean showDistribution = false;

public StringStatsAggregationBuilder(String name) {
super(name, CoreValuesSourceType.BYTES, ValueType.STRING);
super(name);
}

/**
Expand All @@ -71,6 +69,11 @@ public StringStatsAggregationBuilder showDistribution(boolean showDistribution)
return this;
}

@Override
protected ValuesSourceType defaultValueSourceType() {
return CoreValuesSourceType.BYTES;
}

@Override
public String getType() {
return NAME;
Expand All @@ -87,7 +90,7 @@ protected void innerWriteTo(StreamOutput out) throws IOException {
}

@Override
protected ValuesSourceAggregatorFactory<Bytes> innerBuild(QueryShardContext queryShardContext, ValuesSourceConfig<Bytes> config,
protected ValuesSourceAggregatorFactory innerBuild(QueryShardContext queryShardContext, ValuesSourceConfig config,
AggregatorFactory parent, Builder subFactoriesBuilder) throws IOException {
throw new UnsupportedOperationException();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1077,7 +1077,8 @@ public static SearchSourceBuilder createTestSearchSourceBuilder() {
searchSourceBuilder.query(new TermQueryBuilder(randomAlphaOfLengthBetween(3, 10), randomAlphaOfLengthBetween(3, 10)));
}
if (randomBoolean()) {
searchSourceBuilder.aggregation(new TermsAggregationBuilder(randomAlphaOfLengthBetween(3, 10), ValueType.STRING)
searchSourceBuilder.aggregation(new TermsAggregationBuilder(randomAlphaOfLengthBetween(3, 10))
.userValueTypeHint(ValueType.STRING)
.field(randomAlphaOfLengthBetween(3, 10)));
}
if (randomBoolean()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -257,7 +257,8 @@ public void testSearchMatchQuery() throws IOException {
public void testSearchWithTermsAgg() throws IOException {
SearchRequest searchRequest = new SearchRequest();
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.aggregation(new TermsAggregationBuilder("agg1", ValueType.STRING).field("type.keyword"));
searchSourceBuilder.aggregation(new TermsAggregationBuilder("agg1").userValueTypeHint(ValueType.STRING)
.field("type.keyword"));
searchSourceBuilder.size(0);
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse = execute(searchRequest, highLevelClient()::search, highLevelClient()::searchAsync);
Expand Down Expand Up @@ -349,7 +350,7 @@ public void testSearchWithRangeAgg() throws IOException {
public void testSearchWithTermsAndRangeAgg() throws IOException {
SearchRequest searchRequest = new SearchRequest("index");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
TermsAggregationBuilder agg = new TermsAggregationBuilder("agg1", ValueType.STRING).field("type.keyword");
TermsAggregationBuilder agg = new TermsAggregationBuilder("agg1").userValueTypeHint(ValueType.STRING).field("type.keyword");
agg.subAggregation(new RangeAggregationBuilder("subagg").field("num")
.addRange("first", 0, 30).addRange("second", 31, 200));
searchSourceBuilder.aggregation(agg);
Expand Down Expand Up @@ -403,7 +404,7 @@ public void testSearchWithTermsAndRangeAgg() throws IOException {
public void testSearchWithTermsAndWeightedAvg() throws IOException {
SearchRequest searchRequest = new SearchRequest("index");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
TermsAggregationBuilder agg = new TermsAggregationBuilder("agg1", ValueType.STRING).field("type.keyword");
TermsAggregationBuilder agg = new TermsAggregationBuilder("agg1").userValueTypeHint(ValueType.STRING).field("type.keyword");
agg.subAggregation(new WeightedAvgAggregationBuilder("subagg")
.value(new MultiValuesSourceFieldConfig.Builder().setFieldName("num").build())
.weight(new MultiValuesSourceFieldConfig.Builder().setFieldName("num2").build())
Expand Down Expand Up @@ -529,10 +530,12 @@ public void testSearchWithParentJoin() throws IOException {
client().performRequest(answerDoc2);
client().performRequest(new Request(HttpPost.METHOD_NAME, "/_refresh"));

TermsAggregationBuilder leafTermAgg = new TermsAggregationBuilder("top-names", ValueType.STRING)
TermsAggregationBuilder leafTermAgg = new TermsAggregationBuilder("top-names")
.userValueTypeHint(ValueType.STRING)
.field("owner.display_name.keyword").size(10);
ChildrenAggregationBuilder childrenAgg = new ChildrenAggregationBuilder("to-answers", "answer").subAggregation(leafTermAgg);
TermsAggregationBuilder termsAgg = new TermsAggregationBuilder("top-tags", ValueType.STRING).field("tags.keyword")
TermsAggregationBuilder termsAgg = new TermsAggregationBuilder("top-tags").userValueTypeHint(ValueType.STRING)
.field("tags.keyword")
.size(10).subAggregation(childrenAgg);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.size(0).aggregation(termsAgg);
Expand Down Expand Up @@ -744,15 +747,18 @@ public void testMultiSearch() throws Exception {
public void testMultiSearch_withAgg() throws Exception {
MultiSearchRequest multiSearchRequest = new MultiSearchRequest();
SearchRequest searchRequest1 = new SearchRequest("index1");
searchRequest1.source().size(0).aggregation(new TermsAggregationBuilder("name", ValueType.STRING).field("field.keyword")
searchRequest1.source().size(0).aggregation(new TermsAggregationBuilder("name").userValueTypeHint(ValueType.STRING)
.field("field.keyword")
.order(BucketOrder.key(true)));
multiSearchRequest.add(searchRequest1);
SearchRequest searchRequest2 = new SearchRequest("index2");
searchRequest2.source().size(0).aggregation(new TermsAggregationBuilder("name", ValueType.STRING).field("field.keyword")
searchRequest2.source().size(0).aggregation(new TermsAggregationBuilder("name").userValueTypeHint(ValueType.STRING)
.field("field.keyword")
.order(BucketOrder.key(true)));
multiSearchRequest.add(searchRequest2);
SearchRequest searchRequest3 = new SearchRequest("index3");
searchRequest3.source().size(0).aggregation(new TermsAggregationBuilder("name", ValueType.STRING).field("field.keyword")
searchRequest3.source().size(0).aggregation(new TermsAggregationBuilder("name").userValueTypeHint(ValueType.STRING)
.field("field.keyword")
.order(BucketOrder.key(true)));
multiSearchRequest.add(searchRequest3);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,23 +28,19 @@
import org.elasticsearch.search.aggregations.AggregatorFactories;
import org.elasticsearch.search.aggregations.AggregatorFactory;
import org.elasticsearch.search.aggregations.support.ArrayValuesSourceAggregationBuilder;
import org.elasticsearch.search.aggregations.support.CoreValuesSourceType;
import org.elasticsearch.search.aggregations.support.ValueType;
import org.elasticsearch.search.aggregations.support.ValuesSource;
import org.elasticsearch.search.aggregations.support.ValuesSource.Numeric;
import org.elasticsearch.search.aggregations.support.ValuesSourceConfig;

import java.io.IOException;
import java.util.Map;

public class MatrixStatsAggregationBuilder
extends ArrayValuesSourceAggregationBuilder.LeafOnly<ValuesSource.Numeric, MatrixStatsAggregationBuilder> {
extends ArrayValuesSourceAggregationBuilder.LeafOnly<MatrixStatsAggregationBuilder> {
public static final String NAME = "matrix_stats";

private MultiValueMode multiValueMode = MultiValueMode.AVG;

public MatrixStatsAggregationBuilder(String name) {
super(name, CoreValuesSourceType.NUMERIC, ValueType.NUMERIC);
super(name);
}

protected MatrixStatsAggregationBuilder(MatrixStatsAggregationBuilder clone,
Expand All @@ -62,7 +58,7 @@ protected AggregationBuilder shallowCopy(AggregatorFactories.Builder factoriesBu
* Read from a stream.
*/
public MatrixStatsAggregationBuilder(StreamInput in) throws IOException {
super(in, CoreValuesSourceType.NUMERIC, ValueType.NUMERIC);
super(in);
}

@Override
Expand All @@ -81,7 +77,7 @@ public MultiValueMode multiValueMode() {

@Override
protected MatrixStatsAggregatorFactory innerBuild(QueryShardContext queryShardContext,
Map<String, ValuesSourceConfig<Numeric>> configs,
Map<String, ValuesSourceConfig> configs,
AggregatorFactory parent,
AggregatorFactories.Builder subFactoriesBuilder) throws IOException {
return new MatrixStatsAggregatorFactory(name, configs, multiValueMode, queryShardContext, parent, subFactoriesBuilder, metaData);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@

import org.elasticsearch.index.query.QueryShardContext;
import org.elasticsearch.search.MultiValueMode;
import org.elasticsearch.search.aggregations.AggregationExecutionException;
import org.elasticsearch.search.aggregations.Aggregator;
import org.elasticsearch.search.aggregations.AggregatorFactories;
import org.elasticsearch.search.aggregations.AggregatorFactory;
Expand All @@ -30,15 +31,16 @@
import org.elasticsearch.search.internal.SearchContext;

import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

final class MatrixStatsAggregatorFactory extends ArrayValuesSourceAggregatorFactory<ValuesSource.Numeric> {
final class MatrixStatsAggregatorFactory extends ArrayValuesSourceAggregatorFactory {

private final MultiValueMode multiValueMode;

MatrixStatsAggregatorFactory(String name,
Map<String, ValuesSourceConfig<ValuesSource.Numeric>> configs,
Map<String, ValuesSourceConfig> configs,
MultiValueMode multiValueMode,
QueryShardContext queryShardContext,
AggregatorFactory parent,
Expand All @@ -58,12 +60,21 @@ protected Aggregator createUnmapped(SearchContext searchContext,
}

@Override
protected Aggregator doCreateInternal(Map<String, ValuesSource.Numeric> valuesSources,
protected Aggregator doCreateInternal(Map<String, ValuesSource> valuesSources,
SearchContext searchContext,
Aggregator parent,
boolean collectsFromSingleBucket,
List<PipelineAggregator> pipelineAggregators,
Map<String, Object> metaData) throws IOException {
return new MatrixStatsAggregator(name, valuesSources, searchContext, parent, multiValueMode, pipelineAggregators, metaData);
Map<String, ValuesSource.Numeric> typedValuesSources = new HashMap<>(valuesSources.size());
for (Map.Entry<String, ValuesSource> entry : valuesSources.entrySet()) {
if (entry.getValue() instanceof ValuesSource.Numeric == false) {
throw new AggregationExecutionException("ValuesSource type " + entry.getValue().toString() +
"is not supported for aggregation " + this.name());
}
// TODO: There must be a better option than this.
typedValuesSources.put(entry.getKey(), (ValuesSource.Numeric) entry.getValue());
}
return new MatrixStatsAggregator(name, typedValuesSources, searchContext, parent, multiValueMode, pipelineAggregators, metaData);
}
}
Loading