Pipeline aggregations like `stats_bucket`, `sum_bucket`, and `percentiles_bucket` only operate on buckets that have multiple buckets. This adds support for those aggregations to `geo_distance`, `ip_range`, `auto_date_histogram`, and `rare_terms`. This all happened because we used a marker interface to mark compatible aggs, `MultiBucketAggregationBuilder` and it was fairly easy to forget to implement the interface. This replaces the marker interface with an abstract method in `AggregationBuilder`, `bucketCardinality` which makes you return `NONE`, `ONE`, or `MANY`. The `bucket` aggregations can check for `MANY`. At this point `ONE` and `NONE` amount to about the same thing, but I suspect that'll be a useful distinction when validating bucket sorts. Closes #53215
This commit is contained in:
parent
39b3010578
commit
e58ad9fed3
|
@ -86,6 +86,11 @@ public class StringStatsAggregationBuilder extends ValuesSourceAggregationBuilde
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BucketCardinality bucketCardinality() {
|
||||||
|
return BucketCardinality.NONE;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected ValuesSourceAggregatorFactory<Bytes> innerBuild(QueryShardContext queryShardContext, ValuesSourceConfig<Bytes> config,
|
protected ValuesSourceAggregatorFactory<Bytes> innerBuild(QueryShardContext queryShardContext, ValuesSourceConfig<Bytes> config,
|
||||||
AggregatorFactory parent, Builder subFactoriesBuilder) throws IOException {
|
AggregatorFactory parent, Builder subFactoriesBuilder) throws IOException {
|
||||||
|
|
|
@ -94,6 +94,11 @@ public class TopMetricsAggregationBuilder extends AbstractAggregationBuilder<Top
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BucketCardinality bucketCardinality() {
|
||||||
|
return BucketCardinality.NONE;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected AggregatorFactory doBuild(QueryShardContext queryShardContext, AggregatorFactory parent, Builder subfactoriesBuilder)
|
protected AggregatorFactory doBuild(QueryShardContext queryShardContext, AggregatorFactory parent, Builder subfactoriesBuilder)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
|
|
|
@ -38,7 +38,7 @@ import java.io.IOException;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class MatrixStatsAggregationBuilder
|
public class MatrixStatsAggregationBuilder
|
||||||
extends ArrayValuesSourceAggregationBuilder.LeafOnly<ValuesSource.Numeric, MatrixStatsAggregationBuilder> {
|
extends ArrayValuesSourceAggregationBuilder.LeafOnly<ValuesSource.Numeric, MatrixStatsAggregationBuilder> {
|
||||||
public static final String NAME = "matrix_stats";
|
public static final String NAME = "matrix_stats";
|
||||||
|
|
||||||
private MultiValueMode multiValueMode = MultiValueMode.AVG;
|
private MultiValueMode multiValueMode = MultiValueMode.AVG;
|
||||||
|
|
|
@ -84,6 +84,11 @@ public abstract class ArrayValuesSourceAggregationBuilder<VS extends ValuesSourc
|
||||||
throw new AggregationInitializationException("Aggregator [" + name + "] of type [" +
|
throw new AggregationInitializationException("Aggregator [" + name + "] of type [" +
|
||||||
getType() + "] cannot accept sub-aggregations");
|
getType() + "] cannot accept sub-aggregations");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public final BucketCardinality bucketCardinality() {
|
||||||
|
return BucketCardinality.NONE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private final ValuesSourceType valuesSourceType;
|
private final ValuesSourceType valuesSourceType;
|
||||||
|
|
|
@ -94,11 +94,16 @@ public class ChildrenAggregationBuilder
|
||||||
out.writeString(childType);
|
out.writeString(childType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BucketCardinality bucketCardinality() {
|
||||||
|
return BucketCardinality.ONE;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected ValuesSourceAggregatorFactory<WithOrdinals> innerBuild(QueryShardContext queryShardContext,
|
protected ValuesSourceAggregatorFactory<WithOrdinals> innerBuild(QueryShardContext queryShardContext,
|
||||||
ValuesSourceConfig<WithOrdinals> config,
|
ValuesSourceConfig<WithOrdinals> config,
|
||||||
AggregatorFactory parent,
|
AggregatorFactory parent,
|
||||||
Builder subFactoriesBuilder) throws IOException {
|
Builder subFactoriesBuilder) throws IOException {
|
||||||
return new ChildrenAggregatorFactory(name, config, childFilter, parentFilter, queryShardContext, parent,
|
return new ChildrenAggregatorFactory(name, config, childFilter, parentFilter, queryShardContext, parent,
|
||||||
subFactoriesBuilder, metaData);
|
subFactoriesBuilder, metaData);
|
||||||
}
|
}
|
||||||
|
|
|
@ -94,11 +94,16 @@ public class ParentAggregationBuilder
|
||||||
out.writeString(childType);
|
out.writeString(childType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BucketCardinality bucketCardinality() {
|
||||||
|
return BucketCardinality.ONE;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected ValuesSourceAggregatorFactory<WithOrdinals> innerBuild(QueryShardContext queryShardContext,
|
protected ValuesSourceAggregatorFactory<WithOrdinals> innerBuild(QueryShardContext queryShardContext,
|
||||||
ValuesSourceConfig<WithOrdinals> config,
|
ValuesSourceConfig<WithOrdinals> config,
|
||||||
AggregatorFactory parent,
|
AggregatorFactory parent,
|
||||||
Builder subFactoriesBuilder) throws IOException {
|
Builder subFactoriesBuilder) throws IOException {
|
||||||
return new ParentAggregatorFactory(name, config, childFilter, parentFilter, queryShardContext, parent,
|
return new ParentAggregatorFactory(name, config, childFilter, parentFilter, queryShardContext, parent,
|
||||||
subFactoriesBuilder, metaData);
|
subFactoriesBuilder, metaData);
|
||||||
}
|
}
|
||||||
|
|
|
@ -360,3 +360,64 @@ setup:
|
||||||
- is_false: aggregations.str_terms.buckets.0.key_as_string
|
- is_false: aggregations.str_terms.buckets.0.key_as_string
|
||||||
- match: { aggregations.str_terms.buckets.0.doc_count: 1 }
|
- match: { aggregations.str_terms.buckets.0.doc_count: 1 }
|
||||||
- match: { aggregations.str_terms.buckets.0.max_n.value: 3.0 }
|
- match: { aggregations.str_terms.buckets.0.max_n.value: 3.0 }
|
||||||
|
|
||||||
|
---
|
||||||
|
"avg_bucket":
|
||||||
|
- skip:
|
||||||
|
version: " - 7.7.99"
|
||||||
|
reason: Fixed in 7.8.0
|
||||||
|
- do:
|
||||||
|
indices.create:
|
||||||
|
index: test
|
||||||
|
body:
|
||||||
|
settings:
|
||||||
|
number_of_replicas: 0
|
||||||
|
mappings:
|
||||||
|
properties:
|
||||||
|
str:
|
||||||
|
type: keyword
|
||||||
|
- do:
|
||||||
|
bulk:
|
||||||
|
index: test
|
||||||
|
refresh: true
|
||||||
|
body:
|
||||||
|
- '{"index": {}}'
|
||||||
|
- '{"str": "foo", "v": 1}'
|
||||||
|
- '{"index": {}}'
|
||||||
|
- '{"str": "foo", "v": 2}'
|
||||||
|
- '{"index": {}}'
|
||||||
|
- '{"str": "foo", "v": 3}'
|
||||||
|
- '{"index": {}}'
|
||||||
|
- '{"str": "bar", "v": 4}'
|
||||||
|
- '{"index": {}}'
|
||||||
|
- '{"str": "bar", "v": 5}'
|
||||||
|
- '{"index": {}}'
|
||||||
|
- '{"str": "baz", "v": 6}'
|
||||||
|
|
||||||
|
- do:
|
||||||
|
search:
|
||||||
|
index: test
|
||||||
|
body:
|
||||||
|
size: 0
|
||||||
|
aggs:
|
||||||
|
str_terms:
|
||||||
|
rare_terms:
|
||||||
|
field: str
|
||||||
|
max_doc_count: 2
|
||||||
|
aggs:
|
||||||
|
v:
|
||||||
|
sum:
|
||||||
|
field: v
|
||||||
|
str_terms_avg_v:
|
||||||
|
avg_bucket:
|
||||||
|
buckets_path: str_terms.v
|
||||||
|
|
||||||
|
- match: { hits.total.value: 6 }
|
||||||
|
- length: { aggregations.str_terms.buckets: 2 }
|
||||||
|
- match: { aggregations.str_terms.buckets.0.key: baz }
|
||||||
|
- match: { aggregations.str_terms.buckets.0.doc_count: 1 }
|
||||||
|
- match: { aggregations.str_terms.buckets.0.v.value: 6 }
|
||||||
|
- match: { aggregations.str_terms.buckets.1.key: bar }
|
||||||
|
- match: { aggregations.str_terms.buckets.1.doc_count: 2 }
|
||||||
|
- match: { aggregations.str_terms.buckets.1.v.value: 9 }
|
||||||
|
- match: { aggregations.str_terms_avg_v.value: 7.5 }
|
||||||
|
|
|
@ -0,0 +1,76 @@
|
||||||
|
setup:
|
||||||
|
- do:
|
||||||
|
indices.create:
|
||||||
|
index: test
|
||||||
|
body:
|
||||||
|
settings:
|
||||||
|
number_of_replicas: 0
|
||||||
|
mappings:
|
||||||
|
properties:
|
||||||
|
date:
|
||||||
|
type: date
|
||||||
|
- do:
|
||||||
|
bulk:
|
||||||
|
refresh: true
|
||||||
|
index: test
|
||||||
|
body:
|
||||||
|
- '{"index": {}}'
|
||||||
|
- '{"date": "2020-03-01", "v": 1}'
|
||||||
|
- '{"index": {}}'
|
||||||
|
- '{"date": "2020-03-02", "v": 2}'
|
||||||
|
- '{"index": {}}'
|
||||||
|
- '{"date": "2020-03-08", "v": 3}'
|
||||||
|
- '{"index": {}}'
|
||||||
|
- '{"date": "2020-03-09", "v": 4}'
|
||||||
|
|
||||||
|
---
|
||||||
|
"basic":
|
||||||
|
- skip:
|
||||||
|
version: " - 7.7.99"
|
||||||
|
reason: Tracked in https://github.com/elastic/elasticsearch/issues/54382
|
||||||
|
- do:
|
||||||
|
search:
|
||||||
|
body:
|
||||||
|
size: 0
|
||||||
|
aggs:
|
||||||
|
histo:
|
||||||
|
auto_date_histogram:
|
||||||
|
field: date
|
||||||
|
buckets: 2
|
||||||
|
- match: { hits.total.value: 4 }
|
||||||
|
- length: { aggregations.histo.buckets: 2 }
|
||||||
|
- match: { aggregations.histo.buckets.0.key_as_string: "2020-03-01T00:00:00.000Z" }
|
||||||
|
- match: { aggregations.histo.buckets.0.doc_count: 2 }
|
||||||
|
- match: { aggregations.histo.buckets.1.key_as_string: "2020-03-08T00:00:00.000Z" }
|
||||||
|
- match: { aggregations.histo.buckets.1.doc_count: 2 }
|
||||||
|
|
||||||
|
---
|
||||||
|
"avg_bucket":
|
||||||
|
- skip:
|
||||||
|
version: " - 7.7.99"
|
||||||
|
reason: Fixed in 7.8.0
|
||||||
|
- do:
|
||||||
|
search:
|
||||||
|
body:
|
||||||
|
size: 0
|
||||||
|
aggs:
|
||||||
|
histo:
|
||||||
|
auto_date_histogram:
|
||||||
|
field: date
|
||||||
|
buckets: 2
|
||||||
|
aggs:
|
||||||
|
v:
|
||||||
|
sum:
|
||||||
|
field: v
|
||||||
|
histo_avg_v:
|
||||||
|
avg_bucket:
|
||||||
|
buckets_path: histo.v
|
||||||
|
- match: { hits.total.value: 4 }
|
||||||
|
- length: { aggregations.histo.buckets: 2 }
|
||||||
|
- match: { aggregations.histo.buckets.0.key_as_string: "2020-03-01T00:00:00.000Z" }
|
||||||
|
- match: { aggregations.histo.buckets.0.doc_count: 2 }
|
||||||
|
- match: { aggregations.histo.buckets.0.v.value: 3 }
|
||||||
|
- match: { aggregations.histo.buckets.1.key_as_string: "2020-03-08T00:00:00.000Z" }
|
||||||
|
- match: { aggregations.histo.buckets.1.doc_count: 2 }
|
||||||
|
- match: { aggregations.histo.buckets.1.v.value: 7 }
|
||||||
|
- match: { aggregations.histo_avg_v.value: 5 }
|
|
@ -0,0 +1,85 @@
|
||||||
|
setup:
|
||||||
|
- do:
|
||||||
|
indices.create:
|
||||||
|
index: test
|
||||||
|
body:
|
||||||
|
mappings:
|
||||||
|
properties:
|
||||||
|
location:
|
||||||
|
type: geo_point
|
||||||
|
- do:
|
||||||
|
bulk:
|
||||||
|
index: test
|
||||||
|
refresh: true
|
||||||
|
body:
|
||||||
|
- '{"index": {}}'
|
||||||
|
- '{"location": {"lat" : 40.7128, "lon" : -74.0060}, "name": "New York", "population": 8623000}'
|
||||||
|
- '{"index": {}}'
|
||||||
|
- '{"location": {"lat" : 34.0522, "lon" : -118.2437}, "name": "Los Angeles", "population": 4000000}'
|
||||||
|
- '{"index": {}}'
|
||||||
|
- '{"location": {"lat" : 41.8781, "lon" : -87.6298}, "name": "Chicago", "population": 2716000}'
|
||||||
|
|
||||||
|
---
|
||||||
|
"basic":
|
||||||
|
- do:
|
||||||
|
search:
|
||||||
|
rest_total_hits_as_int: true
|
||||||
|
body:
|
||||||
|
size: 0
|
||||||
|
aggs:
|
||||||
|
distance:
|
||||||
|
geo_distance:
|
||||||
|
field: location
|
||||||
|
origin: "35.7796, -78.6382"
|
||||||
|
ranges:
|
||||||
|
- to: 1000000
|
||||||
|
- from: 1000000
|
||||||
|
to: 5000000
|
||||||
|
- from: 5000000
|
||||||
|
- match: { hits.total: 3 }
|
||||||
|
- length: { aggregations.distance.buckets: 3 }
|
||||||
|
- match: { aggregations.distance.buckets.0.key: "*-1000000.0" }
|
||||||
|
- match: { aggregations.distance.buckets.0.doc_count: 1 }
|
||||||
|
- match: { aggregations.distance.buckets.1.key: "1000000.0-5000000.0" }
|
||||||
|
- match: { aggregations.distance.buckets.1.doc_count: 2 }
|
||||||
|
- match: { aggregations.distance.buckets.2.key: "5000000.0-*" }
|
||||||
|
- match: { aggregations.distance.buckets.2.doc_count: 0 }
|
||||||
|
|
||||||
|
---
|
||||||
|
"avg_bucket":
|
||||||
|
- skip:
|
||||||
|
version: " - 7.7.99"
|
||||||
|
reason: Fixed in 7.8.0
|
||||||
|
- do:
|
||||||
|
search:
|
||||||
|
body:
|
||||||
|
size: 0
|
||||||
|
aggs:
|
||||||
|
distance:
|
||||||
|
geo_distance:
|
||||||
|
field: location
|
||||||
|
origin: "35.7796, -78.6382"
|
||||||
|
ranges:
|
||||||
|
- to: 1000000
|
||||||
|
- from: 1000000
|
||||||
|
to: 5000000
|
||||||
|
- from: 5000000
|
||||||
|
aggs:
|
||||||
|
total_population:
|
||||||
|
sum:
|
||||||
|
field: population
|
||||||
|
avg_total_population:
|
||||||
|
avg_bucket:
|
||||||
|
buckets_path: distance.total_population
|
||||||
|
- match: { hits.total.value: 3 }
|
||||||
|
- length: { aggregations.distance.buckets: 3 }
|
||||||
|
- match: { aggregations.distance.buckets.0.key: "*-1000000.0" }
|
||||||
|
- match: { aggregations.distance.buckets.0.doc_count: 1 }
|
||||||
|
- match: { aggregations.distance.buckets.0.total_population.value: 8623000.0 }
|
||||||
|
- match: { aggregations.distance.buckets.1.key: "1000000.0-5000000.0" }
|
||||||
|
- match: { aggregations.distance.buckets.1.doc_count: 2 }
|
||||||
|
- match: { aggregations.distance.buckets.1.total_population.value: 6716000.0 }
|
||||||
|
- match: { aggregations.distance.buckets.2.key: "5000000.0-*" }
|
||||||
|
- match: { aggregations.distance.buckets.2.doc_count: 0 }
|
||||||
|
- match: { aggregations.distance.buckets.2.total_population.value: 0 }
|
||||||
|
- match: { aggregations.avg_total_population.value: 7669500.0 }
|
|
@ -224,6 +224,58 @@ setup:
|
||||||
- match: { aggregations.ip_range.buckets.1.key: "192.168.0.0-192.169.0.0" }
|
- match: { aggregations.ip_range.buckets.1.key: "192.168.0.0-192.169.0.0" }
|
||||||
- match: { aggregations.ip_range.buckets.2.key: "192.169.0.0-*" }
|
- match: { aggregations.ip_range.buckets.2.key: "192.169.0.0-*" }
|
||||||
|
|
||||||
|
---
|
||||||
|
"IP Range avg_bucket":
|
||||||
|
- skip:
|
||||||
|
version: " - 7.7.99"
|
||||||
|
reason: Fixed in 7.8.0
|
||||||
|
- do:
|
||||||
|
bulk:
|
||||||
|
refresh: true
|
||||||
|
index: test
|
||||||
|
body:
|
||||||
|
- '{"index": {}}'
|
||||||
|
- '{"ip": "::1", "v": 1}'
|
||||||
|
- '{"index": {}}'
|
||||||
|
- '{"ip": "192.168.0.1", "v": 2}'
|
||||||
|
- '{"index": {}}'
|
||||||
|
- '{"ip": "192.168.0.7", "v": 3}'
|
||||||
|
|
||||||
|
- do:
|
||||||
|
search:
|
||||||
|
index: test
|
||||||
|
body:
|
||||||
|
size: 0
|
||||||
|
aggs:
|
||||||
|
range:
|
||||||
|
ip_range:
|
||||||
|
field: ip
|
||||||
|
ranges:
|
||||||
|
- to: 192.168.0.0
|
||||||
|
- from: 192.168.0.0
|
||||||
|
to: 192.169.0.0
|
||||||
|
- from: 192.169.0.0
|
||||||
|
aggs:
|
||||||
|
v:
|
||||||
|
sum:
|
||||||
|
field: v
|
||||||
|
range_avg_v:
|
||||||
|
avg_bucket:
|
||||||
|
buckets_path: range.v
|
||||||
|
|
||||||
|
- match: { hits.total.value: 3 }
|
||||||
|
- length: { aggregations.range.buckets: 3 }
|
||||||
|
- match: { aggregations.range.buckets.0.key: "*-192.168.0.0" }
|
||||||
|
- match: { aggregations.range.buckets.0.doc_count: 1 }
|
||||||
|
- match: { aggregations.range.buckets.0.v.value: 1 }
|
||||||
|
- match: { aggregations.range.buckets.1.key: "192.168.0.0-192.169.0.0" }
|
||||||
|
- match: { aggregations.range.buckets.1.doc_count: 2 }
|
||||||
|
- match: { aggregations.range.buckets.1.v.value: 5 }
|
||||||
|
- match: { aggregations.range.buckets.2.key: "192.169.0.0-*" }
|
||||||
|
- match: { aggregations.range.buckets.2.doc_count: 0 }
|
||||||
|
- match: { aggregations.range.buckets.2.v.value: 0 }
|
||||||
|
- match: { aggregations.range_avg_v.value: 3 }
|
||||||
|
|
||||||
---
|
---
|
||||||
"Date range":
|
"Date range":
|
||||||
- do:
|
- do:
|
||||||
|
|
|
@ -154,6 +154,19 @@ public abstract class AggregationBuilder
|
||||||
return factoriesBuilder.buildPipelineTree();
|
return factoriesBuilder.buildPipelineTree();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Rough measure of how many buckets this aggregation can return. Just
|
||||||
|
* "zero", "one", and "many".
|
||||||
|
*/
|
||||||
|
public enum BucketCardinality {
|
||||||
|
NONE, ONE, MANY;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Do aggregations built by this builder contain buckets? If so, do they
|
||||||
|
* contain *always* contain a single bucket?
|
||||||
|
*/
|
||||||
|
public abstract BucketCardinality bucketCardinality();
|
||||||
|
|
||||||
/** Common xcontent fields shared among aggregator builders */
|
/** Common xcontent fields shared among aggregator builders */
|
||||||
public static final class CommonFields extends ParseField.CommonFields {
|
public static final class CommonFields extends ParseField.CommonFields {
|
||||||
public static final ParseField VALUE_TYPE = new ParseField("value_type");
|
public static final ParseField VALUE_TYPE = new ParseField("value_type");
|
||||||
|
|
|
@ -1,30 +0,0 @@
|
||||||
/*
|
|
||||||
* Licensed to Elasticsearch under one or more contributor
|
|
||||||
* license agreements. See the NOTICE file distributed with
|
|
||||||
* this work for additional information regarding copyright
|
|
||||||
* ownership. Elasticsearch licenses this file to you under
|
|
||||||
* the Apache License, Version 2.0 (the "License"); you may
|
|
||||||
* not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing,
|
|
||||||
* software distributed under the License is distributed on an
|
|
||||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
* KIND, either express or implied. See the License for the
|
|
||||||
* specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.elasticsearch.search.aggregations.bucket;
|
|
||||||
|
|
||||||
import org.elasticsearch.search.aggregations.AggregationBuilder;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Marker interface to indicate that the {@link AggregationBuilder} is for a
|
|
||||||
* multi-bucket aggregation.
|
|
||||||
*/
|
|
||||||
public interface MultiBucketAggregationBuilder {
|
|
||||||
|
|
||||||
}
|
|
|
@ -33,7 +33,6 @@ import org.elasticsearch.search.aggregations.AbstractAggregationBuilder;
|
||||||
import org.elasticsearch.search.aggregations.AggregationBuilder;
|
import org.elasticsearch.search.aggregations.AggregationBuilder;
|
||||||
import org.elasticsearch.search.aggregations.AggregatorFactories.Builder;
|
import org.elasticsearch.search.aggregations.AggregatorFactories.Builder;
|
||||||
import org.elasticsearch.search.aggregations.AggregatorFactory;
|
import org.elasticsearch.search.aggregations.AggregatorFactory;
|
||||||
import org.elasticsearch.search.aggregations.bucket.MultiBucketAggregationBuilder;
|
|
||||||
import org.elasticsearch.search.aggregations.bucket.adjacency.AdjacencyMatrixAggregator.KeyedFilter;
|
import org.elasticsearch.search.aggregations.bucket.adjacency.AdjacencyMatrixAggregator.KeyedFilter;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
@ -46,8 +45,7 @@ import java.util.Map;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
public class AdjacencyMatrixAggregationBuilder extends AbstractAggregationBuilder<AdjacencyMatrixAggregationBuilder>
|
public class AdjacencyMatrixAggregationBuilder extends AbstractAggregationBuilder<AdjacencyMatrixAggregationBuilder> {
|
||||||
implements MultiBucketAggregationBuilder {
|
|
||||||
public static final String NAME = "adjacency_matrix";
|
public static final String NAME = "adjacency_matrix";
|
||||||
|
|
||||||
private static final String DEFAULT_SEPARATOR = "&";
|
private static final String DEFAULT_SEPARATOR = "&";
|
||||||
|
@ -215,6 +213,11 @@ public class AdjacencyMatrixAggregationBuilder extends AbstractAggregationBuilde
|
||||||
subFactoriesBuilder, metaData);
|
subFactoriesBuilder, metaData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BucketCardinality bucketCardinality() {
|
||||||
|
return BucketCardinality.MANY;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected XContentBuilder internalXContent(XContentBuilder builder, Params params) throws IOException {
|
protected XContentBuilder internalXContent(XContentBuilder builder, Params params) throws IOException {
|
||||||
builder.startObject();
|
builder.startObject();
|
||||||
|
|
|
@ -147,6 +147,16 @@ public class CompositeAggregationBuilder extends AbstractAggregationBuilder<Comp
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BucketCardinality bucketCardinality() {
|
||||||
|
/*
|
||||||
|
* Cardinality *does* have buckets so MULTI might be appropriate here.
|
||||||
|
* But the buckets can't be used with the composite agg so we're
|
||||||
|
* going to pretend that it doesn't have buckets.
|
||||||
|
*/
|
||||||
|
return BucketCardinality.NONE;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns null if the provided factory and his parents are compatible with
|
* Returns null if the provided factory and his parents are compatible with
|
||||||
* this aggregator or the instance of the parent's factory that is incompatible with
|
* this aggregator or the instance of the parent's factory that is incompatible with
|
||||||
|
|
|
@ -83,6 +83,11 @@ public class FilterAggregationBuilder extends AbstractAggregationBuilder<FilterA
|
||||||
out.writeNamedWriteable(filter);
|
out.writeNamedWriteable(filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BucketCardinality bucketCardinality() {
|
||||||
|
return BucketCardinality.ONE;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected AggregationBuilder doRewrite(QueryRewriteContext queryShardContext) throws IOException {
|
protected AggregationBuilder doRewrite(QueryRewriteContext queryShardContext) throws IOException {
|
||||||
QueryBuilder result = Rewriteable.rewrite(filter, queryShardContext);
|
QueryBuilder result = Rewriteable.rewrite(filter, queryShardContext);
|
||||||
|
|
|
@ -33,7 +33,6 @@ import org.elasticsearch.search.aggregations.AbstractAggregationBuilder;
|
||||||
import org.elasticsearch.search.aggregations.AggregationBuilder;
|
import org.elasticsearch.search.aggregations.AggregationBuilder;
|
||||||
import org.elasticsearch.search.aggregations.AggregatorFactories.Builder;
|
import org.elasticsearch.search.aggregations.AggregatorFactories.Builder;
|
||||||
import org.elasticsearch.search.aggregations.AggregatorFactory;
|
import org.elasticsearch.search.aggregations.AggregatorFactory;
|
||||||
import org.elasticsearch.search.aggregations.bucket.MultiBucketAggregationBuilder;
|
|
||||||
import org.elasticsearch.search.aggregations.bucket.filter.FiltersAggregator.KeyedFilter;
|
import org.elasticsearch.search.aggregations.bucket.filter.FiltersAggregator.KeyedFilter;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
@ -47,8 +46,7 @@ import java.util.Objects;
|
||||||
|
|
||||||
import static org.elasticsearch.index.query.AbstractQueryBuilder.parseInnerQueryBuilder;
|
import static org.elasticsearch.index.query.AbstractQueryBuilder.parseInnerQueryBuilder;
|
||||||
|
|
||||||
public class FiltersAggregationBuilder extends AbstractAggregationBuilder<FiltersAggregationBuilder>
|
public class FiltersAggregationBuilder extends AbstractAggregationBuilder<FiltersAggregationBuilder> {
|
||||||
implements MultiBucketAggregationBuilder {
|
|
||||||
public static final String NAME = "filters";
|
public static final String NAME = "filters";
|
||||||
|
|
||||||
private static final ParseField FILTERS_FIELD = new ParseField("filters");
|
private static final ParseField FILTERS_FIELD = new ParseField("filters");
|
||||||
|
@ -198,6 +196,11 @@ public class FiltersAggregationBuilder extends AbstractAggregationBuilder<Filter
|
||||||
return otherBucketKey;
|
return otherBucketKey;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BucketCardinality bucketCardinality() {
|
||||||
|
return BucketCardinality.MANY;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected AggregationBuilder doRewrite(QueryRewriteContext queryShardContext) throws IOException {
|
protected AggregationBuilder doRewrite(QueryRewriteContext queryShardContext) throws IOException {
|
||||||
List<KeyedFilter> rewrittenFilters = new ArrayList<>(filters.size());
|
List<KeyedFilter> rewrittenFilters = new ArrayList<>(filters.size());
|
||||||
|
|
|
@ -19,11 +19,6 @@
|
||||||
|
|
||||||
package org.elasticsearch.search.aggregations.bucket.geogrid;
|
package org.elasticsearch.search.aggregations.bucket.geogrid;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.function.Function;
|
|
||||||
|
|
||||||
import org.elasticsearch.ElasticsearchException;
|
import org.elasticsearch.ElasticsearchException;
|
||||||
import org.elasticsearch.Version;
|
import org.elasticsearch.Version;
|
||||||
import org.elasticsearch.common.ParseField;
|
import org.elasticsearch.common.ParseField;
|
||||||
|
@ -38,7 +33,6 @@ import org.elasticsearch.index.query.QueryShardContext;
|
||||||
import org.elasticsearch.search.aggregations.AggregatorFactories.Builder;
|
import org.elasticsearch.search.aggregations.AggregatorFactories.Builder;
|
||||||
import org.elasticsearch.search.aggregations.AggregatorFactory;
|
import org.elasticsearch.search.aggregations.AggregatorFactory;
|
||||||
import org.elasticsearch.search.aggregations.bucket.BucketUtils;
|
import org.elasticsearch.search.aggregations.bucket.BucketUtils;
|
||||||
import org.elasticsearch.search.aggregations.bucket.MultiBucketAggregationBuilder;
|
|
||||||
import org.elasticsearch.search.aggregations.support.CoreValuesSourceType;
|
import org.elasticsearch.search.aggregations.support.CoreValuesSourceType;
|
||||||
import org.elasticsearch.search.aggregations.support.ValueType;
|
import org.elasticsearch.search.aggregations.support.ValueType;
|
||||||
import org.elasticsearch.search.aggregations.support.ValuesSource;
|
import org.elasticsearch.search.aggregations.support.ValuesSource;
|
||||||
|
@ -47,8 +41,12 @@ import org.elasticsearch.search.aggregations.support.ValuesSourceAggregatorFacto
|
||||||
import org.elasticsearch.search.aggregations.support.ValuesSourceConfig;
|
import org.elasticsearch.search.aggregations.support.ValuesSourceConfig;
|
||||||
import org.elasticsearch.search.aggregations.support.ValuesSourceParserHelper;
|
import org.elasticsearch.search.aggregations.support.ValuesSourceParserHelper;
|
||||||
|
|
||||||
public abstract class GeoGridAggregationBuilder extends ValuesSourceAggregationBuilder<ValuesSource.GeoPoint, GeoGridAggregationBuilder>
|
import java.io.IOException;
|
||||||
implements MultiBucketAggregationBuilder {
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.function.Function;
|
||||||
|
|
||||||
|
public abstract class GeoGridAggregationBuilder extends ValuesSourceAggregationBuilder<ValuesSource.GeoPoint, GeoGridAggregationBuilder> {
|
||||||
/* recognized field names in JSON */
|
/* recognized field names in JSON */
|
||||||
static final ParseField FIELD_PRECISION = new ParseField("precision");
|
static final ParseField FIELD_PRECISION = new ParseField("precision");
|
||||||
static final ParseField FIELD_SIZE = new ParseField("size");
|
static final ParseField FIELD_SIZE = new ParseField("size");
|
||||||
|
@ -171,11 +169,15 @@ public abstract class GeoGridAggregationBuilder extends ValuesSourceAggregationB
|
||||||
return geoBoundingBox;
|
return geoBoundingBox;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public final BucketCardinality bucketCardinality() {
|
||||||
|
return BucketCardinality.MANY;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected ValuesSourceAggregatorFactory<ValuesSource.GeoPoint> innerBuild(QueryShardContext queryShardContext,
|
protected ValuesSourceAggregatorFactory<ValuesSource.GeoPoint> innerBuild(QueryShardContext queryShardContext,
|
||||||
ValuesSourceConfig<ValuesSource.GeoPoint> config,
|
ValuesSourceConfig<ValuesSource.GeoPoint> config,
|
||||||
AggregatorFactory parent, Builder subFactoriesBuilder)
|
AggregatorFactory parent, Builder subFactoriesBuilder) throws IOException {
|
||||||
throws IOException {
|
|
||||||
int shardSize = this.shardSize;
|
int shardSize = this.shardSize;
|
||||||
|
|
||||||
int requiredSize = this.requiredSize;
|
int requiredSize = this.requiredSize;
|
||||||
|
|
|
@ -19,9 +19,6 @@
|
||||||
|
|
||||||
package org.elasticsearch.search.aggregations.bucket.geogrid;
|
package org.elasticsearch.search.aggregations.bucket.geogrid;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import org.elasticsearch.common.geo.GeoBoundingBox;
|
import org.elasticsearch.common.geo.GeoBoundingBox;
|
||||||
import org.elasticsearch.common.geo.GeoUtils;
|
import org.elasticsearch.common.geo.GeoUtils;
|
||||||
import org.elasticsearch.common.io.stream.StreamInput;
|
import org.elasticsearch.common.io.stream.StreamInput;
|
||||||
|
@ -34,6 +31,9 @@ import org.elasticsearch.search.aggregations.support.ValuesSource;
|
||||||
import org.elasticsearch.search.aggregations.support.ValuesSourceAggregatorFactory;
|
import org.elasticsearch.search.aggregations.support.ValuesSourceAggregatorFactory;
|
||||||
import org.elasticsearch.search.aggregations.support.ValuesSourceConfig;
|
import org.elasticsearch.search.aggregations.support.ValuesSourceConfig;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
public class GeoHashGridAggregationBuilder extends GeoGridAggregationBuilder {
|
public class GeoHashGridAggregationBuilder extends GeoGridAggregationBuilder {
|
||||||
public static final String NAME = "geohash_grid";
|
public static final String NAME = "geohash_grid";
|
||||||
public static final int DEFAULT_PRECISION = 5;
|
public static final int DEFAULT_PRECISION = 5;
|
||||||
|
|
|
@ -65,6 +65,11 @@ public class GlobalAggregationBuilder extends AbstractAggregationBuilder<GlobalA
|
||||||
// Nothing to write
|
// Nothing to write
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BucketCardinality bucketCardinality() {
|
||||||
|
return BucketCardinality.ONE;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected AggregatorFactory doBuild(QueryShardContext queryShardContext, AggregatorFactory parent, Builder subFactoriesBuilder)
|
protected AggregatorFactory doBuild(QueryShardContext queryShardContext, AggregatorFactory parent, Builder subFactoriesBuilder)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
|
|
|
@ -178,9 +178,14 @@ public class AutoDateHistogramAggregationBuilder
|
||||||
return numBuckets;
|
return numBuckets;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BucketCardinality bucketCardinality() {
|
||||||
|
return BucketCardinality.MANY;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected ValuesSourceAggregatorFactory<Numeric> innerBuild(QueryShardContext queryShardContext, ValuesSourceConfig<Numeric> config,
|
protected ValuesSourceAggregatorFactory<Numeric> innerBuild(QueryShardContext queryShardContext, ValuesSourceConfig<Numeric> config,
|
||||||
AggregatorFactory parent, Builder subFactoriesBuilder) throws IOException {
|
AggregatorFactory parent, Builder subFactoriesBuilder) throws IOException {
|
||||||
RoundingInfo[] roundings = buildRoundings(timeZone(), getMinimumIntervalExpression());
|
RoundingInfo[] roundings = buildRoundings(timeZone(), getMinimumIntervalExpression());
|
||||||
int maxRoundingInterval = Arrays.stream(roundings,0, roundings.length-1)
|
int maxRoundingInterval = Arrays.stream(roundings,0, roundings.length-1)
|
||||||
.map(rounding -> rounding.innerIntervals)
|
.map(rounding -> rounding.innerIntervals)
|
||||||
|
|
|
@ -43,7 +43,6 @@ import org.elasticsearch.search.aggregations.AggregatorFactory;
|
||||||
import org.elasticsearch.search.aggregations.BucketOrder;
|
import org.elasticsearch.search.aggregations.BucketOrder;
|
||||||
import org.elasticsearch.search.aggregations.InternalOrder;
|
import org.elasticsearch.search.aggregations.InternalOrder;
|
||||||
import org.elasticsearch.search.aggregations.InternalOrder.CompoundOrder;
|
import org.elasticsearch.search.aggregations.InternalOrder.CompoundOrder;
|
||||||
import org.elasticsearch.search.aggregations.bucket.MultiBucketAggregationBuilder;
|
|
||||||
import org.elasticsearch.search.aggregations.support.CoreValuesSourceType;
|
import org.elasticsearch.search.aggregations.support.CoreValuesSourceType;
|
||||||
import org.elasticsearch.search.aggregations.support.ValueType;
|
import org.elasticsearch.search.aggregations.support.ValueType;
|
||||||
import org.elasticsearch.search.aggregations.support.ValuesSource;
|
import org.elasticsearch.search.aggregations.support.ValuesSource;
|
||||||
|
@ -69,8 +68,7 @@ import static java.util.Collections.unmodifiableMap;
|
||||||
* A builder for histograms on date fields.
|
* A builder for histograms on date fields.
|
||||||
*/
|
*/
|
||||||
public class DateHistogramAggregationBuilder extends ValuesSourceAggregationBuilder<ValuesSource, DateHistogramAggregationBuilder>
|
public class DateHistogramAggregationBuilder extends ValuesSourceAggregationBuilder<ValuesSource, DateHistogramAggregationBuilder>
|
||||||
implements MultiBucketAggregationBuilder, DateIntervalConsumer {
|
implements DateIntervalConsumer {
|
||||||
|
|
||||||
public static final String NAME = "date_histogram";
|
public static final String NAME = "date_histogram";
|
||||||
|
|
||||||
public static final Map<String, Rounding.DateTimeUnit> DATE_FIELD_UNITS;
|
public static final Map<String, Rounding.DateTimeUnit> DATE_FIELD_UNITS;
|
||||||
|
@ -376,6 +374,11 @@ public class DateHistogramAggregationBuilder extends ValuesSourceAggregationBuil
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BucketCardinality bucketCardinality() {
|
||||||
|
return BucketCardinality.MANY;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected XContentBuilder doXContentBody(XContentBuilder builder, Params params) throws IOException {
|
protected XContentBuilder doXContentBody(XContentBuilder builder, Params params) throws IOException {
|
||||||
|
|
||||||
|
|
|
@ -19,11 +19,6 @@
|
||||||
|
|
||||||
package org.elasticsearch.search.aggregations.bucket.histogram;
|
package org.elasticsearch.search.aggregations.bucket.histogram;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
import org.elasticsearch.common.ParseField;
|
import org.elasticsearch.common.ParseField;
|
||||||
import org.elasticsearch.common.io.stream.StreamInput;
|
import org.elasticsearch.common.io.stream.StreamInput;
|
||||||
import org.elasticsearch.common.io.stream.StreamOutput;
|
import org.elasticsearch.common.io.stream.StreamOutput;
|
||||||
|
@ -37,7 +32,6 @@ import org.elasticsearch.search.aggregations.AggregatorFactory;
|
||||||
import org.elasticsearch.search.aggregations.BucketOrder;
|
import org.elasticsearch.search.aggregations.BucketOrder;
|
||||||
import org.elasticsearch.search.aggregations.InternalOrder;
|
import org.elasticsearch.search.aggregations.InternalOrder;
|
||||||
import org.elasticsearch.search.aggregations.InternalOrder.CompoundOrder;
|
import org.elasticsearch.search.aggregations.InternalOrder.CompoundOrder;
|
||||||
import org.elasticsearch.search.aggregations.bucket.MultiBucketAggregationBuilder;
|
|
||||||
import org.elasticsearch.search.aggregations.support.CoreValuesSourceType;
|
import org.elasticsearch.search.aggregations.support.CoreValuesSourceType;
|
||||||
import org.elasticsearch.search.aggregations.support.ValueType;
|
import org.elasticsearch.search.aggregations.support.ValueType;
|
||||||
import org.elasticsearch.search.aggregations.support.ValuesSource;
|
import org.elasticsearch.search.aggregations.support.ValuesSource;
|
||||||
|
@ -47,12 +41,16 @@ import org.elasticsearch.search.aggregations.support.ValuesSourceConfig;
|
||||||
import org.elasticsearch.search.aggregations.support.ValuesSourceParserHelper;
|
import org.elasticsearch.search.aggregations.support.ValuesSourceParserHelper;
|
||||||
import org.elasticsearch.search.aggregations.support.ValuesSourceType;
|
import org.elasticsearch.search.aggregations.support.ValuesSourceType;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A builder for histograms on numeric fields. This builder can operate on either base numeric fields, or numeric range fields. IP range
|
* A builder for histograms on numeric fields. This builder can operate on either base numeric fields, or numeric range fields. IP range
|
||||||
* fields are unsupported, and will throw at the factory layer.
|
* fields are unsupported, and will throw at the factory layer.
|
||||||
*/
|
*/
|
||||||
public class HistogramAggregationBuilder extends ValuesSourceAggregationBuilder<ValuesSource, HistogramAggregationBuilder>
|
public class HistogramAggregationBuilder extends ValuesSourceAggregationBuilder<ValuesSource, HistogramAggregationBuilder> {
|
||||||
implements MultiBucketAggregationBuilder {
|
|
||||||
public static final String NAME = "histogram";
|
public static final String NAME = "histogram";
|
||||||
|
|
||||||
private static final ObjectParser<double[], Void> EXTENDED_BOUNDS_PARSER = new ObjectParser<>(
|
private static final ObjectParser<double[], Void> EXTENDED_BOUNDS_PARSER = new ObjectParser<>(
|
||||||
|
@ -263,6 +261,11 @@ public class HistogramAggregationBuilder extends ValuesSourceAggregationBuilder<
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BucketCardinality bucketCardinality() {
|
||||||
|
return BucketCardinality.MANY;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected XContentBuilder doXContentBody(XContentBuilder builder, Params params) throws IOException {
|
protected XContentBuilder doXContentBody(XContentBuilder builder, Params params) throws IOException {
|
||||||
|
|
||||||
|
|
|
@ -78,11 +78,16 @@ public class MissingAggregationBuilder extends ValuesSourceAggregationBuilder<Va
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BucketCardinality bucketCardinality() {
|
||||||
|
return BucketCardinality.ONE;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected ValuesSourceAggregatorFactory<ValuesSource> innerBuild(QueryShardContext queryShardContext,
|
protected ValuesSourceAggregatorFactory<ValuesSource> innerBuild(QueryShardContext queryShardContext,
|
||||||
ValuesSourceConfig<ValuesSource> config,
|
ValuesSourceConfig<ValuesSource> config,
|
||||||
AggregatorFactory parent,
|
AggregatorFactory parent,
|
||||||
Builder subFactoriesBuilder) throws IOException {
|
Builder subFactoriesBuilder) throws IOException {
|
||||||
return new MissingAggregatorFactory(name, config, queryShardContext, parent, subFactoriesBuilder, metaData);
|
return new MissingAggregatorFactory(name, config, queryShardContext, parent, subFactoriesBuilder, metaData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -86,6 +86,11 @@ public class NestedAggregationBuilder extends AbstractAggregationBuilder<NestedA
|
||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BucketCardinality bucketCardinality() {
|
||||||
|
return BucketCardinality.ONE;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected AggregatorFactory doBuild(QueryShardContext queryShardContext,
|
protected AggregatorFactory doBuild(QueryShardContext queryShardContext,
|
||||||
AggregatorFactory parent,
|
AggregatorFactory parent,
|
||||||
|
|
|
@ -90,6 +90,11 @@ public class ReverseNestedAggregationBuilder extends AbstractAggregationBuilder<
|
||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BucketCardinality bucketCardinality() {
|
||||||
|
return BucketCardinality.ONE;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected AggregatorFactory doBuild(QueryShardContext queryShardContext, AggregatorFactory parent, Builder subFactoriesBuilder)
|
protected AggregatorFactory doBuild(QueryShardContext queryShardContext, AggregatorFactory parent, Builder subFactoriesBuilder)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
|
|
|
@ -25,7 +25,6 @@ import org.elasticsearch.common.io.stream.StreamOutput;
|
||||||
import org.elasticsearch.common.io.stream.Writeable;
|
import org.elasticsearch.common.io.stream.Writeable;
|
||||||
import org.elasticsearch.common.xcontent.XContentBuilder;
|
import org.elasticsearch.common.xcontent.XContentBuilder;
|
||||||
import org.elasticsearch.search.aggregations.AggregatorFactories;
|
import org.elasticsearch.search.aggregations.AggregatorFactories;
|
||||||
import org.elasticsearch.search.aggregations.bucket.MultiBucketAggregationBuilder;
|
|
||||||
import org.elasticsearch.search.aggregations.bucket.range.RangeAggregator.Range;
|
import org.elasticsearch.search.aggregations.bucket.range.RangeAggregator.Range;
|
||||||
import org.elasticsearch.search.aggregations.support.ValuesSource;
|
import org.elasticsearch.search.aggregations.support.ValuesSource;
|
||||||
import org.elasticsearch.search.aggregations.support.ValuesSourceAggregationBuilder;
|
import org.elasticsearch.search.aggregations.support.ValuesSourceAggregationBuilder;
|
||||||
|
@ -38,8 +37,7 @@ import java.util.Objects;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
public abstract class AbstractRangeBuilder<AB extends AbstractRangeBuilder<AB, R>, R extends Range>
|
public abstract class AbstractRangeBuilder<AB extends AbstractRangeBuilder<AB, R>, R extends Range>
|
||||||
extends ValuesSourceAggregationBuilder<ValuesSource.Numeric, AB> implements MultiBucketAggregationBuilder {
|
extends ValuesSourceAggregationBuilder<ValuesSource.Numeric, AB> {
|
||||||
|
|
||||||
protected final InternalRange.Factory<?, ?> rangeFactory;
|
protected final InternalRange.Factory<?, ?> rangeFactory;
|
||||||
protected List<R> ranges = new ArrayList<>();
|
protected List<R> ranges = new ArrayList<>();
|
||||||
protected boolean keyed = false;
|
protected boolean keyed = false;
|
||||||
|
@ -132,6 +130,11 @@ public abstract class AbstractRangeBuilder<AB extends AbstractRangeBuilder<AB, R
|
||||||
return keyed;
|
return keyed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BucketCardinality bucketCardinality() {
|
||||||
|
return BucketCardinality.MANY;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected XContentBuilder doXContentBody(XContentBuilder builder, Params params) throws IOException {
|
protected XContentBuilder doXContentBody(XContentBuilder builder, Params params) throws IOException {
|
||||||
builder.field(RangeAggregator.RANGES_FIELD.getPreferredName(), ranges);
|
builder.field(RangeAggregator.RANGES_FIELD.getPreferredName(), ranges);
|
||||||
|
|
|
@ -410,11 +410,16 @@ public class GeoDistanceAggregationBuilder extends ValuesSourceAggregationBuilde
|
||||||
return keyed;
|
return keyed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BucketCardinality bucketCardinality() {
|
||||||
|
return BucketCardinality.MANY;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected ValuesSourceAggregatorFactory<ValuesSource.GeoPoint> innerBuild(QueryShardContext queryShardContext,
|
protected ValuesSourceAggregatorFactory<ValuesSource.GeoPoint> innerBuild(QueryShardContext queryShardContext,
|
||||||
ValuesSourceConfig<ValuesSource.GeoPoint> config,
|
ValuesSourceConfig<ValuesSource.GeoPoint> config,
|
||||||
AggregatorFactory parent,
|
AggregatorFactory parent,
|
||||||
Builder subFactoriesBuilder) throws IOException {
|
Builder subFactoriesBuilder) throws IOException {
|
||||||
Range[] ranges = this.ranges.toArray(new Range[this.range().size()]);
|
Range[] ranges = this.ranges.toArray(new Range[this.range().size()]);
|
||||||
if (ranges.length == 0) {
|
if (ranges.length == 0) {
|
||||||
throw new IllegalArgumentException("No [ranges] specified for the [" + this.getName() + "] aggregation");
|
throw new IllegalArgumentException("No [ranges] specified for the [" + this.getName() + "] aggregation");
|
||||||
|
|
|
@ -18,15 +18,6 @@
|
||||||
*/
|
*/
|
||||||
package org.elasticsearch.search.aggregations.bucket.range;
|
package org.elasticsearch.search.aggregations.bucket.range;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.net.InetAddress;
|
|
||||||
import java.net.UnknownHostException;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
import org.apache.lucene.document.InetAddressPoint;
|
import org.apache.lucene.document.InetAddressPoint;
|
||||||
import org.apache.lucene.util.BytesRef;
|
import org.apache.lucene.util.BytesRef;
|
||||||
import org.elasticsearch.common.ParseField;
|
import org.elasticsearch.common.ParseField;
|
||||||
|
@ -53,6 +44,15 @@ import org.elasticsearch.search.aggregations.support.ValuesSourceAggregatorFacto
|
||||||
import org.elasticsearch.search.aggregations.support.ValuesSourceConfig;
|
import org.elasticsearch.search.aggregations.support.ValuesSourceConfig;
|
||||||
import org.elasticsearch.search.aggregations.support.ValuesSourceParserHelper;
|
import org.elasticsearch.search.aggregations.support.ValuesSourceParserHelper;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.InetAddress;
|
||||||
|
import java.net.UnknownHostException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
|
||||||
public final class IpRangeAggregationBuilder
|
public final class IpRangeAggregationBuilder
|
||||||
extends ValuesSourceAggregationBuilder<ValuesSource.Bytes, IpRangeAggregationBuilder> {
|
extends ValuesSourceAggregationBuilder<ValuesSource.Bytes, IpRangeAggregationBuilder> {
|
||||||
|
@ -359,11 +359,15 @@ public final class IpRangeAggregationBuilder
|
||||||
return new BytesRef(bytes);
|
return new BytesRef(bytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BucketCardinality bucketCardinality() {
|
||||||
|
return BucketCardinality.MANY;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected ValuesSourceAggregatorFactory<ValuesSource.Bytes> innerBuild(
|
protected ValuesSourceAggregatorFactory<ValuesSource.Bytes> innerBuild(
|
||||||
QueryShardContext queryShardContext, ValuesSourceConfig<ValuesSource.Bytes> config,
|
QueryShardContext queryShardContext, ValuesSourceConfig<ValuesSource.Bytes> config,
|
||||||
AggregatorFactory parent, Builder subFactoriesBuilder)
|
AggregatorFactory parent, Builder subFactoriesBuilder) throws IOException {
|
||||||
throws IOException {
|
|
||||||
List<BinaryRangeAggregator.Range> ranges = new ArrayList<>();
|
List<BinaryRangeAggregator.Range> ranges = new ArrayList<>();
|
||||||
if(this.ranges.size() == 0){
|
if(this.ranges.size() == 0){
|
||||||
throw new IllegalArgumentException("No [ranges] specified for the [" + this.getName() + "] aggregation");
|
throw new IllegalArgumentException("No [ranges] specified for the [" + this.getName() + "] aggregation");
|
||||||
|
|
|
@ -142,11 +142,16 @@ public class DiversifiedAggregationBuilder extends ValuesSourceAggregationBuilde
|
||||||
return executionHint;
|
return executionHint;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BucketCardinality bucketCardinality() {
|
||||||
|
return BucketCardinality.ONE;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected ValuesSourceAggregatorFactory<ValuesSource> innerBuild(QueryShardContext queryShardContext,
|
protected ValuesSourceAggregatorFactory<ValuesSource> innerBuild(QueryShardContext queryShardContext,
|
||||||
ValuesSourceConfig<ValuesSource> config,
|
ValuesSourceConfig<ValuesSource> config,
|
||||||
AggregatorFactory parent,
|
AggregatorFactory parent,
|
||||||
Builder subFactoriesBuilder) throws IOException {
|
Builder subFactoriesBuilder) throws IOException {
|
||||||
return new DiversifiedAggregatorFactory(name, config, shardSize, maxDocsPerValue, executionHint, queryShardContext, parent,
|
return new DiversifiedAggregatorFactory(name, config, shardSize, maxDocsPerValue, executionHint, queryShardContext, parent,
|
||||||
subFactoriesBuilder, metaData);
|
subFactoriesBuilder, metaData);
|
||||||
}
|
}
|
||||||
|
|
|
@ -83,6 +83,11 @@ public class SamplerAggregationBuilder extends AbstractAggregationBuilder<Sample
|
||||||
return shardSize;
|
return shardSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BucketCardinality bucketCardinality() {
|
||||||
|
return BucketCardinality.ONE;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected SamplerAggregatorFactory doBuild(QueryShardContext queryShardContext, AggregatorFactory parent, Builder subFactoriesBuilder)
|
protected SamplerAggregatorFactory doBuild(QueryShardContext queryShardContext, AggregatorFactory parent, Builder subFactoriesBuilder)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
|
|
|
@ -31,7 +31,6 @@ import org.elasticsearch.index.query.QueryShardContext;
|
||||||
import org.elasticsearch.search.aggregations.AggregationBuilder;
|
import org.elasticsearch.search.aggregations.AggregationBuilder;
|
||||||
import org.elasticsearch.search.aggregations.AggregatorFactories.Builder;
|
import org.elasticsearch.search.aggregations.AggregatorFactories.Builder;
|
||||||
import org.elasticsearch.search.aggregations.AggregatorFactory;
|
import org.elasticsearch.search.aggregations.AggregatorFactory;
|
||||||
import org.elasticsearch.search.aggregations.bucket.MultiBucketAggregationBuilder;
|
|
||||||
import org.elasticsearch.search.aggregations.bucket.significant.heuristics.JLHScore;
|
import org.elasticsearch.search.aggregations.bucket.significant.heuristics.JLHScore;
|
||||||
import org.elasticsearch.search.aggregations.bucket.significant.heuristics.SignificanceHeuristic;
|
import org.elasticsearch.search.aggregations.bucket.significant.heuristics.SignificanceHeuristic;
|
||||||
import org.elasticsearch.search.aggregations.bucket.terms.IncludeExclude;
|
import org.elasticsearch.search.aggregations.bucket.terms.IncludeExclude;
|
||||||
|
@ -52,8 +51,7 @@ import java.util.Objects;
|
||||||
|
|
||||||
import static org.elasticsearch.index.query.AbstractQueryBuilder.parseInnerQueryBuilder;
|
import static org.elasticsearch.index.query.AbstractQueryBuilder.parseInnerQueryBuilder;
|
||||||
|
|
||||||
public class SignificantTermsAggregationBuilder extends ValuesSourceAggregationBuilder<ValuesSource, SignificantTermsAggregationBuilder>
|
public class SignificantTermsAggregationBuilder extends ValuesSourceAggregationBuilder<ValuesSource, SignificantTermsAggregationBuilder> {
|
||||||
implements MultiBucketAggregationBuilder {
|
|
||||||
public static final String NAME = "significant_terms";
|
public static final String NAME = "significant_terms";
|
||||||
|
|
||||||
static final ParseField BACKGROUND_FILTER = new ParseField("background_filter");
|
static final ParseField BACKGROUND_FILTER = new ParseField("background_filter");
|
||||||
|
@ -282,11 +280,16 @@ public class SignificantTermsAggregationBuilder extends ValuesSourceAggregationB
|
||||||
return significanceHeuristic;
|
return significanceHeuristic;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BucketCardinality bucketCardinality() {
|
||||||
|
return BucketCardinality.MANY;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected ValuesSourceAggregatorFactory<ValuesSource> innerBuild(QueryShardContext queryShardContext,
|
protected ValuesSourceAggregatorFactory<ValuesSource> innerBuild(QueryShardContext queryShardContext,
|
||||||
ValuesSourceConfig<ValuesSource> config,
|
ValuesSourceConfig<ValuesSource> config,
|
||||||
AggregatorFactory parent,
|
AggregatorFactory parent,
|
||||||
Builder subFactoriesBuilder) throws IOException {
|
Builder subFactoriesBuilder) throws IOException {
|
||||||
SignificanceHeuristic executionHeuristic = this.significanceHeuristic.rewrite(queryShardContext);
|
SignificanceHeuristic executionHeuristic = this.significanceHeuristic.rewrite(queryShardContext);
|
||||||
return new SignificantTermsAggregatorFactory(name, config, includeExclude, executionHint, filterBuilder,
|
return new SignificantTermsAggregatorFactory(name, config, includeExclude, executionHint, filterBuilder,
|
||||||
bucketCountThresholds, executionHeuristic, queryShardContext, parent, subFactoriesBuilder, metaData);
|
bucketCountThresholds, executionHeuristic, queryShardContext, parent, subFactoriesBuilder, metaData);
|
||||||
|
|
|
@ -321,6 +321,11 @@ public class SignificantTextAggregationBuilder extends AbstractAggregationBuilde
|
||||||
out.writeOptionalStringArray(sourceFieldNames);
|
out.writeOptionalStringArray(sourceFieldNames);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BucketCardinality bucketCardinality() {
|
||||||
|
return BucketCardinality.MANY;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected AggregatorFactory doBuild(QueryShardContext queryShardContext, AggregatorFactory parent,
|
protected AggregatorFactory doBuild(QueryShardContext queryShardContext, AggregatorFactory parent,
|
||||||
Builder subFactoriesBuilder) throws IOException {
|
Builder subFactoriesBuilder) throws IOException {
|
||||||
|
|
|
@ -156,11 +156,16 @@ public class RareTermsAggregationBuilder extends ValuesSourceAggregationBuilder<
|
||||||
this.precision = precision;
|
this.precision = precision;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BucketCardinality bucketCardinality() {
|
||||||
|
return BucketCardinality.MANY;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected ValuesSourceAggregatorFactory<ValuesSource> innerBuild(QueryShardContext queryShardContext,
|
protected ValuesSourceAggregatorFactory<ValuesSource> innerBuild(QueryShardContext queryShardContext,
|
||||||
ValuesSourceConfig<ValuesSource> config,
|
ValuesSourceConfig<ValuesSource> config,
|
||||||
AggregatorFactory parent,
|
AggregatorFactory parent,
|
||||||
Builder subFactoriesBuilder) throws IOException {
|
Builder subFactoriesBuilder) throws IOException {
|
||||||
return new RareTermsAggregatorFactory(name, config, includeExclude,
|
return new RareTermsAggregatorFactory(name, config, includeExclude,
|
||||||
queryShardContext, parent, subFactoriesBuilder, metaData, maxDocCount, precision);
|
queryShardContext, parent, subFactoriesBuilder, metaData, maxDocCount, precision);
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,7 +34,6 @@ import org.elasticsearch.search.aggregations.AggregatorFactory;
|
||||||
import org.elasticsearch.search.aggregations.BucketOrder;
|
import org.elasticsearch.search.aggregations.BucketOrder;
|
||||||
import org.elasticsearch.search.aggregations.InternalOrder;
|
import org.elasticsearch.search.aggregations.InternalOrder;
|
||||||
import org.elasticsearch.search.aggregations.InternalOrder.CompoundOrder;
|
import org.elasticsearch.search.aggregations.InternalOrder.CompoundOrder;
|
||||||
import org.elasticsearch.search.aggregations.bucket.MultiBucketAggregationBuilder;
|
|
||||||
import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregator.BucketCountThresholds;
|
import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregator.BucketCountThresholds;
|
||||||
import org.elasticsearch.search.aggregations.support.CoreValuesSourceType;
|
import org.elasticsearch.search.aggregations.support.CoreValuesSourceType;
|
||||||
import org.elasticsearch.search.aggregations.support.ValueType;
|
import org.elasticsearch.search.aggregations.support.ValueType;
|
||||||
|
@ -49,8 +48,7 @@ import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
public class TermsAggregationBuilder extends ValuesSourceAggregationBuilder<ValuesSource, TermsAggregationBuilder>
|
public class TermsAggregationBuilder extends ValuesSourceAggregationBuilder<ValuesSource, TermsAggregationBuilder> {
|
||||||
implements MultiBucketAggregationBuilder {
|
|
||||||
public static final String NAME = "terms";
|
public static final String NAME = "terms";
|
||||||
|
|
||||||
public static final ParseField EXECUTION_HINT_FIELD_NAME = new ParseField("execution_hint");
|
public static final ParseField EXECUTION_HINT_FIELD_NAME = new ParseField("execution_hint");
|
||||||
|
@ -329,11 +327,16 @@ public class TermsAggregationBuilder extends ValuesSourceAggregationBuilder<Valu
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BucketCardinality bucketCardinality() {
|
||||||
|
return BucketCardinality.MANY;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected ValuesSourceAggregatorFactory<ValuesSource> innerBuild(QueryShardContext queryShardContext,
|
protected ValuesSourceAggregatorFactory<ValuesSource> innerBuild(QueryShardContext queryShardContext,
|
||||||
ValuesSourceConfig<ValuesSource> config,
|
ValuesSourceConfig<ValuesSource> config,
|
||||||
AggregatorFactory parent,
|
AggregatorFactory parent,
|
||||||
Builder subFactoriesBuilder) throws IOException {
|
Builder subFactoriesBuilder) throws IOException {
|
||||||
return new TermsAggregatorFactory(name, config, order, includeExclude, executionHint, collectMode,
|
return new TermsAggregatorFactory(name, config, order, includeExclude, executionHint, collectMode,
|
||||||
bucketCountThresholds, showTermDocCountError, queryShardContext, parent, subFactoriesBuilder, metaData);
|
bucketCountThresholds, showTermDocCountError, queryShardContext, parent, subFactoriesBuilder, metaData);
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,10 +19,6 @@
|
||||||
|
|
||||||
package org.elasticsearch.search.aggregations.metrics;
|
package org.elasticsearch.search.aggregations.metrics;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
import org.elasticsearch.common.io.stream.StreamInput;
|
import org.elasticsearch.common.io.stream.StreamInput;
|
||||||
import org.elasticsearch.common.io.stream.StreamOutput;
|
import org.elasticsearch.common.io.stream.StreamOutput;
|
||||||
import org.elasticsearch.common.xcontent.ObjectParser;
|
import org.elasticsearch.common.xcontent.ObjectParser;
|
||||||
|
@ -38,6 +34,10 @@ import org.elasticsearch.search.aggregations.support.ValuesSourceAggregationBuil
|
||||||
import org.elasticsearch.search.aggregations.support.ValuesSourceConfig;
|
import org.elasticsearch.search.aggregations.support.ValuesSourceConfig;
|
||||||
import org.elasticsearch.search.aggregations.support.ValuesSourceParserHelper;
|
import org.elasticsearch.search.aggregations.support.ValuesSourceParserHelper;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
public class GeoBoundsAggregationBuilder extends ValuesSourceAggregationBuilder<ValuesSource.GeoPoint, GeoBoundsAggregationBuilder> {
|
public class GeoBoundsAggregationBuilder extends ValuesSourceAggregationBuilder<ValuesSource.GeoPoint, GeoBoundsAggregationBuilder> {
|
||||||
public static final String NAME = "geo_bounds";
|
public static final String NAME = "geo_bounds";
|
||||||
|
|
||||||
|
@ -92,6 +92,11 @@ public class GeoBoundsAggregationBuilder extends ValuesSourceAggregationBuilder<
|
||||||
return wrapLongitude;
|
return wrapLongitude;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BucketCardinality bucketCardinality() {
|
||||||
|
return BucketCardinality.NONE;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected GeoBoundsAggregatorFactory innerBuild(QueryShardContext queryShardContext, ValuesSourceConfig<ValuesSource.GeoPoint> config,
|
protected GeoBoundsAggregatorFactory innerBuild(QueryShardContext queryShardContext, ValuesSourceConfig<ValuesSource.GeoPoint> config,
|
||||||
AggregatorFactory parent, Builder subFactoriesBuilder) throws IOException {
|
AggregatorFactory parent, Builder subFactoriesBuilder) throws IOException {
|
||||||
|
|
|
@ -206,6 +206,11 @@ public class ScriptedMetricAggregationBuilder extends AbstractAggregationBuilder
|
||||||
return params;
|
return params;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BucketCardinality bucketCardinality() {
|
||||||
|
return BucketCardinality.NONE;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected ScriptedMetricAggregatorFactory doBuild(QueryShardContext queryShardContext, AggregatorFactory parent,
|
protected ScriptedMetricAggregatorFactory doBuild(QueryShardContext queryShardContext, AggregatorFactory parent,
|
||||||
Builder subfactoriesBuilder) throws IOException {
|
Builder subfactoriesBuilder) throws IOException {
|
||||||
|
|
|
@ -575,6 +575,11 @@ public class TopHitsAggregationBuilder extends AbstractAggregationBuilder<TopHit
|
||||||
+ getType() + "] cannot accept sub-aggregations");
|
+ getType() + "] cannot accept sub-aggregations");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BucketCardinality bucketCardinality() {
|
||||||
|
return BucketCardinality.NONE;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected TopHitsAggregatorFactory doBuild(QueryShardContext queryShardContext, AggregatorFactory parent, Builder subfactoriesBuilder)
|
protected TopHitsAggregatorFactory doBuild(QueryShardContext queryShardContext, AggregatorFactory parent, Builder subfactoriesBuilder)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
|
|
|
@ -92,12 +92,17 @@ public class WeightedAvgAggregationBuilder extends MultiValuesSourceAggregationB
|
||||||
// Do nothing, no extra state to write to stream
|
// Do nothing, no extra state to write to stream
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BucketCardinality bucketCardinality() {
|
||||||
|
return BucketCardinality.NONE;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected MultiValuesSourceAggregatorFactory<Numeric> innerBuild(QueryShardContext queryShardContext,
|
protected MultiValuesSourceAggregatorFactory<Numeric> innerBuild(QueryShardContext queryShardContext,
|
||||||
Map<String, ValuesSourceConfig<Numeric>> configs,
|
Map<String, ValuesSourceConfig<Numeric>> configs,
|
||||||
DocValueFormat format,
|
DocValueFormat format,
|
||||||
AggregatorFactory parent,
|
AggregatorFactory parent,
|
||||||
Builder subFactoriesBuilder) throws IOException {
|
Builder subFactoriesBuilder) throws IOException {
|
||||||
return new WeightedAvgAggregatorFactory(name, configs, format, queryShardContext, parent, subFactoriesBuilder, metaData);
|
return new WeightedAvgAggregatorFactory(name, configs, format, queryShardContext, parent, subFactoriesBuilder, metaData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,6 @@ import org.elasticsearch.common.io.stream.StreamOutput;
|
||||||
import org.elasticsearch.common.xcontent.XContentBuilder;
|
import org.elasticsearch.common.xcontent.XContentBuilder;
|
||||||
import org.elasticsearch.search.DocValueFormat;
|
import org.elasticsearch.search.DocValueFormat;
|
||||||
import org.elasticsearch.search.aggregations.AggregationBuilder;
|
import org.elasticsearch.search.aggregations.AggregationBuilder;
|
||||||
import org.elasticsearch.search.aggregations.bucket.MultiBucketAggregationBuilder;
|
|
||||||
import org.elasticsearch.search.aggregations.pipeline.BucketHelpers.GapPolicy;
|
import org.elasticsearch.search.aggregations.pipeline.BucketHelpers.GapPolicy;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
@ -121,7 +120,7 @@ public abstract class BucketMetricsPipelineAggregationBuilder<AF extends BucketM
|
||||||
context.addBucketPathValidationError("aggregation does not exist for aggregation [" + name + "]: " + bucketsPaths[0]);
|
context.addBucketPathValidationError("aggregation does not exist for aggregation [" + name + "]: " + bucketsPaths[0]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if ((aggBuilder.get() instanceof MultiBucketAggregationBuilder) == false) {
|
if (aggBuilder.get().bucketCardinality() != AggregationBuilder.BucketCardinality.MANY) {
|
||||||
context.addValidationError("The first aggregation in " + PipelineAggregator.Parser.BUCKETS_PATH.getPreferredName()
|
context.addValidationError("The first aggregation in " + PipelineAggregator.Parser.BUCKETS_PATH.getPreferredName()
|
||||||
+ " must be a multi-bucket aggregation for aggregation [" + name + "] found :"
|
+ " must be a multi-bucket aggregation for aggregation [" + name + "] found :"
|
||||||
+ aggBuilder.get().getClass().getName() + " for buckets path: " + bucketsPaths[0]);
|
+ aggBuilder.get().getClass().getName() + " for buckets path: " + bucketsPaths[0]);
|
||||||
|
|
|
@ -73,6 +73,11 @@ public abstract class ValuesSourceAggregationBuilder<VS extends ValuesSource, AB
|
||||||
throw new AggregationInitializationException("Aggregator [" + name + "] of type ["
|
throw new AggregationInitializationException("Aggregator [" + name + "] of type ["
|
||||||
+ getType() + "] cannot accept sub-aggregations");
|
+ getType() + "] cannot accept sub-aggregations");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public final BucketCardinality bucketCardinality() {
|
||||||
|
return BucketCardinality.NONE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private final ValuesSourceType valuesSourceType;
|
private final ValuesSourceType valuesSourceType;
|
||||||
|
|
|
@ -396,11 +396,16 @@ public class SearchModuleTests extends ESTestCase {
|
||||||
protected void innerWriteTo(StreamOutput out) throws IOException {
|
protected void innerWriteTo(StreamOutput out) throws IOException {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BucketCardinality bucketCardinality() {
|
||||||
|
return BucketCardinality.NONE;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected ValuesSourceAggregatorFactory<ValuesSource> innerBuild(QueryShardContext queryShardContext,
|
protected ValuesSourceAggregatorFactory<ValuesSource> innerBuild(QueryShardContext queryShardContext,
|
||||||
ValuesSourceConfig<ValuesSource> config,
|
ValuesSourceConfig<ValuesSource> config,
|
||||||
AggregatorFactory parent,
|
AggregatorFactory parent,
|
||||||
Builder subFactoriesBuilder) throws IOException {
|
Builder subFactoriesBuilder) throws IOException {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -65,6 +65,11 @@ public class StringStatsAggregationBuilder extends ValuesSourceAggregationBuilde
|
||||||
out.writeBoolean(showDistribution);
|
out.writeBoolean(showDistribution);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BucketCardinality bucketCardinality() {
|
||||||
|
return BucketCardinality.NONE;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected StringStatsAggregatorFactory innerBuild(QueryShardContext queryShardContext,
|
protected StringStatsAggregatorFactory innerBuild(QueryShardContext queryShardContext,
|
||||||
ValuesSourceConfig<ValuesSource.Bytes> config,
|
ValuesSourceConfig<ValuesSource.Bytes> config,
|
||||||
|
|
|
@ -113,6 +113,11 @@ public class TopMetricsAggregationBuilder extends AbstractAggregationBuilder<Top
|
||||||
return new TopMetricsAggregationBuilder(this, factoriesBuilder, metaData);
|
return new TopMetricsAggregationBuilder(this, factoriesBuilder, metaData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BucketCardinality bucketCardinality() {
|
||||||
|
return BucketCardinality.NONE;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected AggregatorFactory doBuild(QueryShardContext queryShardContext, AggregatorFactory parent, Builder subFactoriesBuilder)
|
protected AggregatorFactory doBuild(QueryShardContext queryShardContext, AggregatorFactory parent, Builder subFactoriesBuilder)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
|
|
|
@ -99,4 +99,9 @@ public class CancellingAggregationBuilder extends AbstractAggregationBuilder<Can
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BucketCardinality bucketCardinality() {
|
||||||
|
return BucketCardinality.NONE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,11 +64,16 @@ public class MockDeprecatedAggregationBuilder extends ValuesSourceAggregationBui
|
||||||
protected void innerWriteTo(StreamOutput out) throws IOException {
|
protected void innerWriteTo(StreamOutput out) throws IOException {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BucketCardinality bucketCardinality() {
|
||||||
|
return BucketCardinality.NONE;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected ValuesSourceAggregatorFactory<ValuesSource> innerBuild(QueryShardContext queryShardContext,
|
protected ValuesSourceAggregatorFactory<ValuesSource> innerBuild(QueryShardContext queryShardContext,
|
||||||
ValuesSourceConfig<ValuesSource> config,
|
ValuesSourceConfig<ValuesSource> config,
|
||||||
AggregatorFactory parent,
|
AggregatorFactory parent,
|
||||||
Builder subFactoriesBuilder) throws IOException {
|
Builder subFactoriesBuilder) throws IOException {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue