- All Implemented Interfaces:
Nested Class Summary
Nested classes/interfaces inherited from class org.elasticsearch.search.aggregations.metrics.NumericMetricsAggregator
Fields inherited from class org.elasticsearch.search.aggregations.AggregatorBase
collectableSubAggregators, DEFAULT_WEIGHT, name, parent, subAggregators
Method SummaryModifier and TypeMethodDescription
(long owningBucketOrdinal)Build an aggregation for data that has been collected into
()Build an empty aggregation.
voidCollect debug information to add to the profiling results.
()Release instance-specific data.
()Can be overridden by aggregator implementation to be called back when the collection phase ends.
LeafBucketCollector sub)(org.apache.lucene.index.LeafReaderContext ctx,Collect results for this leaf.
()Most aggregators don't need scores, make sure to extend this method if your aggregator needs them.
Methods inherited from class org.elasticsearch.search.aggregations.metrics.NumericMetricsAggregator.SingleValue
Methods inherited from class org.elasticsearch.search.aggregations.metrics.MetricsAggregator
Methods inherited from class org.elasticsearch.search.aggregations.AggregatorBase
addRequestCircuitBreakerBytes, bigArrays, buildEmptySubAggregations, close, doPreCollection, getLeafCollector, metadata, name, parent, pointReaderIfAvailable, postCollection, preCollection, preGetSubLeafCollectors, searcher, subAggregator, subAggregators, topLevelQuery, toString
Methods inherited from class org.elasticsearch.search.aggregations.Aggregator
buildTopLevel, resolveSortPath, resolveSortPathOnValidAgg
scoreModepublic org.apache.lucene.search.ScoreMode scoreMode()Most aggregators don't need scores, make sure to extend this method if your aggregator needs them.
getLeafCollectorpublic LeafBucketCollector getLeafCollector(org.apache.lucene.index.LeafReaderContext ctx, LeafBucketCollector sub) throws IOExceptionCollect 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.
doPostCollectionprotected void doPostCollection() throws IOExceptionCan be overridden by aggregator implementation to be called back when the collection phase ends.
metricpublic double metric(long owningBucketOrd)
buildAggregationpublic InternalAggregation buildAggregation(long owningBucketOrdinal)Description copied from class:
MetricsAggregatorBuild an aggregation for data that has been collected into
buildEmptyAggregationpublic InternalAggregation buildEmptyAggregation()Description copied from class:
AggregatorBuild an empty aggregation.
doCloseprotected void doClose()Release instance-specific data.
collectDebugInfoDescription 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
XContentBuilder.value(Object). And they'll have an integration test.