Class RangeAggregator
java.lang.Object
org.elasticsearch.search.aggregations.BucketCollector
org.elasticsearch.search.aggregations.Aggregator
org.elasticsearch.search.aggregations.AggregatorBase
org.elasticsearch.search.aggregations.bucket.BucketsAggregator
org.elasticsearch.search.aggregations.bucket.range.RangeAggregator
- All Implemented Interfaces:
Closeable
,AutoCloseable
,org.apache.lucene.search.Collector
,org.elasticsearch.core.Releasable
Aggregator for
range
. There are two known subclasses,
RangeAggregator.NoOverlap
which is fast but only compatible with ranges that
don't have overlaps and RangeAggregator.Overlap
which handles overlapping
ranges. There is also RangeAggregator.FromFilters
which isn't a subclass
but is also a functional aggregator for range
.
build(java.lang.String, org.elasticsearch.search.aggregations.AggregatorFactories, org.elasticsearch.search.aggregations.support.ValuesSourceConfig, org.elasticsearch.search.aggregations.bucket.range.InternalRange.Factory<?, ?>, org.elasticsearch.search.aggregations.bucket.range.RangeAggregator.Range[], boolean, org.elasticsearch.search.aggregations.support.AggregationContext, org.elasticsearch.search.aggregations.Aggregator, org.elasticsearch.search.aggregations.CardinalityUpperBound, java.util.Map<java.lang.String, java.lang.Object>)
will build the fastest of the three
that is compatible with the requested configuration.-
Nested Class Summary
Modifier and TypeClassDescriptionstatic class
static class
Nested classes/interfaces inherited from class org.elasticsearch.search.aggregations.bucket.BucketsAggregator
BucketsAggregator.BucketBuilderForFixedCount<B>, BucketsAggregator.BucketBuilderForVariable<B>, BucketsAggregator.ResultBuilderForVariable<B>, BucketsAggregator.SingleBucketResultBuilder
Nested classes/interfaces inherited from class org.elasticsearch.search.aggregations.Aggregator
Aggregator.BucketComparator, Aggregator.Parser, Aggregator.SubAggCollectionMode
-
Field Summary
Modifier and TypeFieldDescriptionstatic double
Minimum number of docs in the index per range before we attempt to use a filter-based collection mechanism.static org.elasticsearch.common.xcontent.ParseField
static long
The maximumlong
that can accurately fit into thedouble
precision floating point bounds.protected RangeAggregator.Range[]
static org.elasticsearch.common.xcontent.ParseField
protected ValuesSource
Fields inherited from class org.elasticsearch.search.aggregations.bucket.BucketsAggregator
docCountProvider
Fields inherited from class org.elasticsearch.search.aggregations.AggregatorBase
collectableSubAggregators, DEFAULT_WEIGHT, name, parent, subAggregators
Fields inherited from class org.elasticsearch.search.aggregations.BucketCollector
NO_OP_COLLECTOR
-
Constructor Summary
ConstructorDescriptionRangeAggregator(String name, AggregatorFactories factories, ValuesSource valuesSource, DocValueFormat format, InternalRange.Factory rangeFactory, RangeAggregator.Range[] ranges, double averageDocsPerRange, boolean keyed, AggregationContext context, Aggregator parent, CardinalityUpperBound cardinality, Map<String,Object> metadata)
-
Method Summary
Modifier and TypeMethodDescriptionstatic org.elasticsearch.search.aggregations.bucket.range.RangeAggregator.FromFilters<?>
adaptIntoFiltersOrNull(String name, AggregatorFactories factories, ValuesSourceConfig valuesSourceConfig, InternalRange.Factory<?,?> rangeFactory, RangeAggregator.Range[] ranges, double averageDocsPerRange, boolean keyed, AggregationContext context, Aggregator parent, CardinalityUpperBound cardinality, Map<String,Object> metadata)
static Aggregator
build(String name, AggregatorFactories factories, ValuesSourceConfig valuesSourceConfig, InternalRange.Factory<?,?> rangeFactory, RangeAggregator.Range[] ranges, boolean keyed, AggregationContext context, Aggregator parent, CardinalityUpperBound cardinality, Map<String,Object> metadata)
Build anAggregator
for arange
aggregation.buildAggregations(long[] owningBucketOrds)
Build the results of this aggregation.Build an empty aggregation.static Aggregator
buildWithoutAttemptedToAdaptToFilters(String name, AggregatorFactories factories, ValuesSource.Numeric valuesSource, DocValueFormat format, InternalRange.Factory<?,?> rangeFactory, RangeAggregator.Range[] ranges, double averageDocsPerRange, boolean keyed, AggregationContext context, Aggregator parent, CardinalityUpperBound cardinality, Map<String,Object> metadata)
void
Collect debug information to add to the profiling results.static boolean
hasOverlap(RangeAggregator.Range[] ranges)
org.apache.lucene.search.ScoreMode
Most aggregators don't need scores, make sure to extend this method if your aggregator needs them.protected long
subBucketOrdinal(long owningBucketOrdinal, int rangeOrd)
Methods inherited from class org.elasticsearch.search.aggregations.bucket.BucketsAggregator
bucketComparator, bucketDocCount, buildAggregationsForFixedBucketCount, buildAggregationsForSingleBucket, buildAggregationsForVariableBuckets, buildSubAggsForAllBuckets, buildSubAggsForBuckets, buildSubAggsForBuckets, close, collectBucket, collectExistingBucket, descendsFromGlobalAggregator, getDocCounts, grow, incrementBucketDocCount, maxBucketOrd, preGetSubLeafCollectors, prepareSubAggs, resolveSortPath, rewriteBuckets
Methods inherited from class org.elasticsearch.search.aggregations.AggregatorBase
addRequestCircuitBreakerBytes, bigArrays, buildEmptySubAggregations, doClose, doPostCollection, doPreCollection, getLeafCollector, getLeafCollector, metadata, name, parent, pointReaderIfAvailable, postCollection, preCollection, searcher, subAggregator, subAggregators, topLevelQuery, toString
Methods inherited from class org.elasticsearch.search.aggregations.Aggregator
buildTopLevel, resolveSortPathOnValidAgg
-
Field Details
-
DOCS_PER_RANGE_TO_USE_FILTERS
public static final double DOCS_PER_RANGE_TO_USE_FILTERSMinimum number of docs in the index per range before we attempt to use a filter-based collection mechanism. This exists mostly to keep fast range aggregations fast. Each filter has an overhead in the ball park of half a millisecond just to build itsScorerSupplier
. If there are only a couple of thousand docs in the range then it tends not to be worth it to kick in the optimization.The value of this field was experimentally derived but the experiment wasn't particularly rigorous. We had a performance test that collected 123 buckets with an average of 900 documents per bucket that jumped from 35ms to 90ms. I figure that 5000 is fairly close to where the break even point is.
- See Also:
- Constant Field Values
-
MAX_ACCURATE_BOUND
public static final long MAX_ACCURATE_BOUNDThe maximumlong
that can accurately fit into thedouble
precision floating point bounds.- See Also:
- Constant Field Values
-
RANGES_FIELD
public static final org.elasticsearch.common.xcontent.ParseField RANGES_FIELD -
KEYED_FIELD
public static final org.elasticsearch.common.xcontent.ParseField KEYED_FIELD -
valuesSource
-
ranges
-
-
Constructor Details
-
RangeAggregator
public RangeAggregator(String name, AggregatorFactories factories, ValuesSource valuesSource, DocValueFormat format, InternalRange.Factory rangeFactory, RangeAggregator.Range[] ranges, double averageDocsPerRange, boolean keyed, AggregationContext context, Aggregator parent, CardinalityUpperBound cardinality, Map<String,Object> metadata) throws IOException- Throws:
IOException
-
-
Method Details
-
build
public static Aggregator build(String name, AggregatorFactories factories, ValuesSourceConfig valuesSourceConfig, InternalRange.Factory<?,?> rangeFactory, RangeAggregator.Range[] ranges, boolean keyed, AggregationContext context, Aggregator parent, CardinalityUpperBound cardinality, Map<String,Object> metadata) throws IOExceptionBuild anAggregator
for arange
aggregation. If theranges
can be converted into filters then it builds aFiltersAggregator
and uses that to collect the results if that aggregator can run in "filter by filter" collection mode. If it can't then we'll collect the ranges using a nativeRangeAggregator
which is significantly faster than the "compatible" collection mechanism for the filters agg.- Throws:
IOException
-
adaptIntoFiltersOrNull
public static org.elasticsearch.search.aggregations.bucket.range.RangeAggregator.FromFilters<?> adaptIntoFiltersOrNull(String name, AggregatorFactories factories, ValuesSourceConfig valuesSourceConfig, InternalRange.Factory<?,?> rangeFactory, RangeAggregator.Range[] ranges, double averageDocsPerRange, boolean keyed, AggregationContext context, Aggregator parent, CardinalityUpperBound cardinality, Map<String,Object> metadata) throws IOException- Throws:
IOException
-
buildWithoutAttemptedToAdaptToFilters
public static Aggregator buildWithoutAttemptedToAdaptToFilters(String name, AggregatorFactories factories, ValuesSource.Numeric valuesSource, DocValueFormat format, InternalRange.Factory<?,?> rangeFactory, RangeAggregator.Range[] ranges, double averageDocsPerRange, boolean keyed, AggregationContext context, Aggregator parent, CardinalityUpperBound cardinality, Map<String,Object> metadata) throws IOException- Throws:
IOException
-
scoreMode
public org.apache.lucene.search.ScoreMode scoreMode()Description copied from class:AggregatorBase
Most aggregators don't need scores, make sure to extend this method if your aggregator needs them.- Specified by:
scoreMode
in interfaceorg.apache.lucene.search.Collector
- Overrides:
scoreMode
in classAggregatorBase
-
subBucketOrdinal
protected long subBucketOrdinal(long owningBucketOrdinal, int rangeOrd) -
buildAggregations
Description copied from class:Aggregator
Build the results of this aggregation.- Specified by:
buildAggregations
in classAggregator
- Parameters:
owningBucketOrds
- the ordinals of the buckets that we want to collect from this aggregation- Returns:
- the results for each ordinal, in the same order as the array of ordinals
- Throws:
IOException
-
buildEmptyAggregation
Description copied from class:Aggregator
Build an empty aggregation.- Specified by:
buildEmptyAggregation
in classAggregator
-
collectDebugInfo
Description copied from class:Aggregator
Collect debug information to add to the profiling results. This will only be called if the aggregation is being profiled.Well behaved implementations will always call the superclass implementation just in case it has something interesting. They will also only add objects which can be serialized with
StreamOutput.writeGenericValue(Object)
andXContentBuilder.value(Object)
. And they'll have an integration test.- Overrides:
collectDebugInfo
in classAggregator
-
hasOverlap
-