- All Implemented Interfaces:
- Direct Known Subclasses:
Nested Class Summary
Nested classes/interfaces inherited from class org.elasticsearch.search.aggregations.Aggregator
Aggregator.BucketComparator, Aggregator.Parser, Aggregator.SubAggCollectionMode
Fields inherited from class org.elasticsearch.search.aggregations.AggregatorBase
collectableSubAggregators, DEFAULT_WEIGHT, name, parent, subAggregators
Fields inherited from class org.elasticsearch.search.aggregations.BucketCollector
(String name, AggregationContext context, Aggregator parent, AggregatorFactories subFactories, Map<String, Object> metadata)
Method SummaryModifier and TypeMethodDescription
(long owningBucketOrds)Build the results of this aggregation.
(org.apache.lucene.index.LeafReaderContext reader, LeafBucketCollector sub)Collect results for this leaf.
Methods inherited from class org.elasticsearch.search.aggregations.AggregatorBase
addRequestCircuitBreakerBytes, bigArrays, buildEmptySubAggregations, close, doClose, doPostCollection, doPreCollection, getLeafCollector, metadata, name, parent, pointReaderIfAvailable, postCollection, preCollection, preGetSubLeafCollectors, scoreMode, searcher, subAggregator, subAggregators, topLevelQuery, toString
Methods inherited from class org.elasticsearch.search.aggregations.Aggregator
bucketComparator, buildEmptyAggregation, buildTopLevel, collectDebugInfo, resolveSortPath, resolveSortPathOnValidAgg
(String name, AggregationContext context, Aggregator parent, AggregatorFactories subFactories, Map<String, Object> metadata)throws IOException
getLeafCollectorpublic final LeafBucketCollector getLeafCollector
(org.apache.lucene.index.LeafReaderContext reader, LeafBucketCollector sub)Description copied from class:
AggregatorBaseCollect results for this leaf.
Most Aggregators will return a custom
LeafBucketCollectorthat collects document information for every hit. Callers of this method will make sure to call
collectfor every hit. So any
Aggregatorthat returns a customer LeafBucketCollector from this method runs at best
O(hits)time. See the
sumAggregator for a fairly strait forward example of this.
Some Aggregators are able to correctly collect results on their own, without being iterated by the top level query or the rest of the aggregations framework. These aggregations collect what they need by calling methods on
LeafReaderContextand then they return
LeafBucketCollector.NO_OP_COLLECTORto signal that they've done their own collection. These aggregations can do better than
O(hits). See the
minAggregator for an example of an aggregation that does this. It happens to run in constant time in some cases.
In other cases
MinAggregatorcan't get correct results by taking the constant time path so instead it returns a custom
LeafBucketCollector. This is fairly common for aggregations that have these fast paths because most of these fast paths are only possible when the aggregation is at the root of the tree.
Its also useful to look at the
filtersAggregator chooses whether or not it can use the fast path before building the Aggregator rather than on each leaf. Either is fine.
- Specified by:
buildAggregationspublic InternalAggregation buildAggregations
(long owningBucketOrds) throws IOExceptionDescription copied from class:
AggregatorBuild the results of this aggregation.
- Specified by:
owningBucketOrds- the ordinals of the buckets that we want to collect from this aggregation
- the results for each ordinal, in the same order as the array of ordinals