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:
java.io.Closeable,java.lang.AutoCloseable,org.apache.lucene.search.Collector,Releasable
public abstract class RangeAggregator extends BucketsAggregator
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
Nested Classes Modifier and Type Class Description static classRangeAggregator.Rangestatic classRangeAggregator.Unmapped<R extends RangeAggregator.Range>Nested classes/interfaces inherited from class org.elasticsearch.search.aggregations.bucket.BucketsAggregator
BucketsAggregator.BucketBuilderForFixedCount<B>, BucketsAggregator.BucketBuilderForVariable<B>, BucketsAggregator.ResultBuilderForVariable<B>, BucketsAggregator.SingleBucketResultBuilderNested classes/interfaces inherited from class org.elasticsearch.search.aggregations.Aggregator
Aggregator.BucketComparator, Aggregator.Parser, Aggregator.SubAggCollectionMode -
Field Summary
Fields Modifier and Type Field Description static doubleDOCS_PER_RANGE_TO_USE_FILTERSMinimum number of docs in the index per range before we attempt to use a filter-based collection mechanism.static org.elasticsearch.common.ParseFieldKEYED_FIELDstatic longMAX_ACCURATE_BOUNDThe maximumlongthat can accurately fit into thedoubleprecision floating point bounds.protected RangeAggregator.Range[]rangesstatic org.elasticsearch.common.ParseFieldRANGES_FIELDFields inherited from class org.elasticsearch.search.aggregations.bucket.BucketsAggregator
docCountProviderFields inherited from class org.elasticsearch.search.aggregations.AggregatorBase
collectableSubAggregators, DEFAULT_WEIGHT, name, parent, subAggregatorsFields inherited from class org.elasticsearch.search.aggregations.BucketCollector
NO_OP_COLLECTOR -
Method Summary
Modifier and Type Method Description static org.elasticsearch.search.aggregations.bucket.range.RangeAggregator.FromFilters<?>adaptIntoFiltersOrNull(java.lang.String name, AggregatorFactories factories, ValuesSourceConfig valuesSourceConfig, InternalRange.Factory<?,?> rangeFactory, RangeAggregator.Range[] ranges, double averageDocsPerRange, boolean keyed, AggregationContext context, Aggregator parent, CardinalityUpperBound cardinality, java.util.Map<java.lang.String,java.lang.Object> metadata)static Aggregatorbuild(java.lang.String name, AggregatorFactories factories, ValuesSourceConfig valuesSourceConfig, InternalRange.Factory<?,?> rangeFactory, RangeAggregator.Range[] ranges, boolean keyed, AggregationContext context, Aggregator parent, CardinalityUpperBound cardinality, java.util.Map<java.lang.String,java.lang.Object> metadata)Build anAggregatorfor arangeaggregation.InternalAggregation[]buildAggregations(long[] owningBucketOrds)Build the results of this aggregation.InternalAggregationbuildEmptyAggregation()Build an empty aggregation.static AggregatorbuildWithoutAttemptedToAdaptToFilters(java.lang.String name, AggregatorFactories factories, ValuesSource.Numeric valuesSource, DocValueFormat format, InternalRange.Factory<?,?> rangeFactory, RangeAggregator.Range[] ranges, double averageDocsPerRange, java.util.Map<java.lang.String,java.lang.Object> filtersDebug, boolean keyed, AggregationContext context, Aggregator parent, CardinalityUpperBound cardinality, java.util.Map<java.lang.String,java.lang.Object> metadata)protected abstract intcollect(LeafBucketCollector sub, int doc, double value, long owningBucketOrdinal, int lowBound)voidcollectDebugInfo(java.util.function.BiConsumer<java.lang.String,java.lang.Object> add)Collect debug information to add to the profiling results.LeafBucketCollectorgetLeafCollector(org.apache.lucene.index.LeafReaderContext ctx, LeafBucketCollector sub)Get aLeafBucketCollectorfor the given ctx, which should delegate to the given collector.org.apache.lucene.search.ScoreModescoreMode()Most aggregators don't need scores, make sure to extend this method if your aggregator needs them.protected longsubBucketOrdinal(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, rewriteBucketsMethods inherited from class org.elasticsearch.search.aggregations.AggregatorBase
addRequestCircuitBreakerBytes, bigArrays, buildEmptySubAggregations, doClose, doPostCollection, doPreCollection, getLeafCollector, metadata, name, parent, pointReaderIfAvailable, postCollection, preCollection, searcher, subAggregator, subAggregators, topLevelQuery, toStringMethods inherited from class org.elasticsearch.search.aggregations.Aggregator
buildTopLevel, resolveSortPathOnValidAggMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
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 maximumlongthat can accurately fit into thedoubleprecision floating point bounds.- See Also:
- Constant Field Values
-
RANGES_FIELD
public static final org.elasticsearch.common.ParseField RANGES_FIELD -
KEYED_FIELD
public static final org.elasticsearch.common.ParseField KEYED_FIELD -
ranges
-
-
Method Details
-
build
public static Aggregator build(java.lang.String name, AggregatorFactories factories, ValuesSourceConfig valuesSourceConfig, InternalRange.Factory<?,?> rangeFactory, RangeAggregator.Range[] ranges, boolean keyed, AggregationContext context, Aggregator parent, CardinalityUpperBound cardinality, java.util.Map<java.lang.String,java.lang.Object> metadata) throws java.io.IOExceptionBuild anAggregatorfor arangeaggregation. If therangescan be converted into filters then it builds aFiltersAggregatorand 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 nativeRangeAggregatorwhich is significantly faster than the "compatible" collection mechanism for the filters agg.- Throws:
java.io.IOException
-
adaptIntoFiltersOrNull
public static org.elasticsearch.search.aggregations.bucket.range.RangeAggregator.FromFilters<?> adaptIntoFiltersOrNull(java.lang.String name, AggregatorFactories factories, ValuesSourceConfig valuesSourceConfig, InternalRange.Factory<?,?> rangeFactory, RangeAggregator.Range[] ranges, double averageDocsPerRange, boolean keyed, AggregationContext context, Aggregator parent, CardinalityUpperBound cardinality, java.util.Map<java.lang.String,java.lang.Object> metadata) throws java.io.IOException- Throws:
java.io.IOException
-
buildWithoutAttemptedToAdaptToFilters
public static Aggregator buildWithoutAttemptedToAdaptToFilters(java.lang.String name, AggregatorFactories factories, ValuesSource.Numeric valuesSource, DocValueFormat format, InternalRange.Factory<?,?> rangeFactory, RangeAggregator.Range[] ranges, double averageDocsPerRange, java.util.Map<java.lang.String,java.lang.Object> filtersDebug, boolean keyed, AggregationContext context, Aggregator parent, CardinalityUpperBound cardinality, java.util.Map<java.lang.String,java.lang.Object> metadata) throws java.io.IOException- Throws:
java.io.IOException
-
scoreMode
public org.apache.lucene.search.ScoreMode scoreMode()Description copied from class:AggregatorBaseMost aggregators don't need scores, make sure to extend this method if your aggregator needs them.- Specified by:
scoreModein interfaceorg.apache.lucene.search.Collector- Overrides:
scoreModein classAggregatorBase
-
getLeafCollector
public LeafBucketCollector getLeafCollector(org.apache.lucene.index.LeafReaderContext ctx, LeafBucketCollector sub) throws java.io.IOExceptionDescription copied from class:AggregatorBaseGet aLeafBucketCollectorfor the given ctx, which should delegate to the given collector.- Specified by:
getLeafCollectorin classAggregatorBase- Throws:
java.io.IOException
-
subBucketOrdinal
protected long subBucketOrdinal(long owningBucketOrdinal, int rangeOrd) -
buildAggregations
Description copied from class:AggregatorBuild the results of this aggregation.- Specified by:
buildAggregationsin 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:
java.io.IOException
-
buildEmptyAggregation
Description copied from class:AggregatorBuild an empty aggregation.- Specified by:
buildEmptyAggregationin classAggregator
-
collectDebugInfo
public void collectDebugInfo(java.util.function.BiConsumer<java.lang.String,java.lang.Object> add)Description copied from class:AggregatorCollect 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:
collectDebugInfoin classAggregator
-
collect
protected abstract int collect(LeafBucketCollector sub, int doc, double value, long owningBucketOrdinal, int lowBound) throws java.io.IOException- Throws:
java.io.IOException
-