Class AggregatorBase

java.lang.Object
All Implemented Interfaces:
java.io.Closeable, java.lang.AutoCloseable, org.apache.lucene.search.Collector, Releasable
Direct Known Subclasses:
BucketsAggregator, MetricsAggregator, NonCollectingAggregator

public abstract class AggregatorBase
extends Aggregator
Base implementation for concrete aggregators.
  • Field Details

    • DEFAULT_WEIGHT

      public static final int DEFAULT_WEIGHT
      The default "weight" that a bucket takes when performing an aggregation
      See Also:
      Constant Field Values
    • name

      protected final java.lang.String name
    • parent

      protected final Aggregator parent
    • subAggregators

      protected final Aggregator[] subAggregators
    • collectableSubAggregators

      protected BucketCollector collectableSubAggregators
  • Constructor Details

    • AggregatorBase

      protected AggregatorBase​(java.lang.String name, AggregatorFactories factories, AggregationContext context, Aggregator parent, CardinalityUpperBound subAggregatorCardinality, java.util.Map<java.lang.String,​java.lang.Object> metadata) throws java.io.IOException
      Constructs a new Aggregator.
      Parameters:
      name - The name of the aggregation
      factories - The factories for all the sub-aggregators under this aggregator
      context - The aggregation context
      parent - The parent aggregator (may be null for top level aggregators)
      subAggregatorCardinality - Upper bound of the number of buckets that sub aggregations will collect
      metadata - The metadata associated with this aggregator
      Throws:
      java.io.IOException
  • Method Details

    • pointReaderIfAvailable

      public final java.util.function.Function<byte[],​java.lang.Number> pointReaderIfAvailable​(ValuesSourceConfig config)
      Returns a converter for point values if it's safe to use the indexed data instead of doc values. Generally, this means that the query has no filters or scripts, the aggregation is top level, and the underlying field is indexed, and the index is sorted in the right order. If those conditions aren't met, return null to indicate a point reader cannot be used in this case.
      Parameters:
      config - The config for the values source metric.
    • addRequestCircuitBreakerBytes

      protected long addRequestCircuitBreakerBytes​(long bytes)
      Increment or decrement the number of bytes that have been allocated to service this request and potentially trigger a CircuitBreakingException. The number of bytes allocated is automatically decremented with the circuit breaker service on closure of this aggregator. If memory has been returned, decrement it without tripping the breaker. For performance reasons subclasses should not call this millions of times each with small increments and instead batch up into larger allocations.
      Parameters:
      bytes - the number of bytes to register or negative to deregister the bytes
      Returns:
      the cumulative size in bytes allocated by this aggregator to service this request
    • scoreMode

      public org.apache.lucene.search.ScoreMode scoreMode()
      Most aggregators don't need scores, make sure to extend this method if your aggregator needs them.
    • metadata

      public java.util.Map<java.lang.String,​java.lang.Object> metadata()
    • getLeafCollector

      protected abstract LeafBucketCollector getLeafCollector​(org.apache.lucene.index.LeafReaderContext ctx, LeafBucketCollector sub) throws java.io.IOException
      Get a LeafBucketCollector for the given ctx, which should delegate to the given collector.
      Throws:
      java.io.IOException
    • getLeafCollector

      public final LeafBucketCollector getLeafCollector​(org.apache.lucene.index.LeafReaderContext ctx) throws java.io.IOException
      Specified by:
      getLeafCollector in interface org.apache.lucene.search.Collector
      Specified by:
      getLeafCollector in class BucketCollector
      Throws:
      java.io.IOException
    • preGetSubLeafCollectors

      protected void preGetSubLeafCollectors​(org.apache.lucene.index.LeafReaderContext ctx) throws java.io.IOException
      Can be overridden by aggregator implementations that like the perform an operation before the leaf collectors of children aggregators are instantiated for the next segment.
      Throws:
      java.io.IOException
    • doPreCollection

      protected void doPreCollection() throws java.io.IOException
      Can be overridden by aggregator implementation to be called back when the collection phase starts.
      Throws:
      java.io.IOException
    • preCollection

      public final void preCollection() throws java.io.IOException
      Description copied from class: BucketCollector
      Pre collection callback.
      Specified by:
      preCollection in class BucketCollector
      Throws:
      java.io.IOException
    • name

      public java.lang.String name()
      Description copied from class: Aggregator
      Return the name of this aggregator.
      Specified by:
      name in class Aggregator
      Returns:
      The name of the aggregation.
    • parent

      public Aggregator parent()
      Description copied from class: Aggregator
      Return the parent aggregator.
      Specified by:
      parent in class Aggregator
      Returns:
      The parent aggregator of this aggregator. The addAggregation are hierarchical in the sense that some can be composed out of others (more specifically, bucket addAggregation can define other addAggregation that will be aggregated per bucket). This method returns the direct parent aggregator that contains this aggregator, or null if there is none (meaning, this aggregator is a top level one)
    • subAggregators

      public Aggregator[] subAggregators()
      Description copied from class: Aggregator
      Get the aggregators running under this one.
      Specified by:
      subAggregators in class Aggregator
    • subAggregator

      public Aggregator subAggregator​(java.lang.String aggName)
      Description copied from class: Aggregator
      Return the sub aggregator with the provided name.
      Specified by:
      subAggregator in class Aggregator
    • postCollection

      public void postCollection() throws java.io.IOException
      Called after collection of all document is done.

      Warning: this is not final only to allow the parent join aggregator to delay this until building buckets.

      Specified by:
      postCollection in class BucketCollector
      Throws:
      java.io.IOException
    • close

      public void close()
      Called upon release of the aggregator.
    • doClose

      protected void doClose()
      Release instance-specific data.
    • doPostCollection

      protected void doPostCollection() throws java.io.IOException
      Can be overridden by aggregator implementation to be called back when the collection phase ends.
      Throws:
      java.io.IOException
    • buildEmptySubAggregations

      protected final InternalAggregations buildEmptySubAggregations()
    • toString

      public java.lang.String toString()
      Overrides:
      toString in class java.lang.Object
    • bigArrays

      protected final BigArrays bigArrays()
      Utilities for sharing large primitive arrays and tracking their usage. Used by all subclasses.
    • topLevelQuery

      protected final org.apache.lucene.search.Query topLevelQuery()
      The "top level" query that will filter the results sent to this Aggregator. Used by all Aggregators that perform extra collection phases in addition to the one done in getLeafCollector(LeafReaderContext, LeafBucketCollector).
    • searcher

      protected final org.apache.lucene.search.IndexSearcher searcher()
      The searcher for the shard this Aggregator is running against. Used by all Aggregators that perform extra collection phases in addition to the one done in getLeafCollector(LeafReaderContext, LeafBucketCollector) and by to look up extra "background" information about contents of the shard itself.