Class LeafBucketCollector

org.elasticsearch.search.aggregations.LeafBucketCollector
All Implemented Interfaces:
org.apache.lucene.search.LeafCollector
Direct Known Subclasses:
LeafBucketCollectorBase, ProfilingLeafBucketCollector

public abstract class LeafBucketCollector extends implements org.apache.lucene.search.LeafCollector
Collects results for a particular segment. See the docs for collect(int, long) for how to do the collecting.
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    A LeafBucketCollector that doesn't collect anything.
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    collect​(int doc)
     
    abstract void
    collect​(int doc, long owningBucketOrd)
    Collect the given doc in the bucket owned by owningBucketOrd.
    boolean
    Does this collector collect anything? If this returns true we can safely just never call collect(int, long).
    void
    setScorer​(org.apache.lucene.search.Scorable scorer)
     

    Methods inherited from class java.lang.

    , , , , , , , , , ,

    Methods inherited from interface org.apache.lucene.search.LeafCollector

    competitiveIterator
  • Field Details

  • Constructor Details

    • LeafBucketCollector

      public LeafBucketCollector()
  • Method Details

    • collect

      public abstract void collect(int doc, long owningBucketOrd) throws
      Collect the given doc in the bucket owned by owningBucketOrd.

      The implementation of this method metric aggregations is generally something along the lines of

      
       array[owningBucketOrd] += loadValueFromDoc(doc)
       

      Bucket aggregations have more trouble because their job is to make new ordinals. So their implementation generally looks kind of like

      
       long myBucketOrd = mapOwningBucketAndValueToMyOrd(owningBucketOrd, loadValueFromDoc(doc));
       collectBucket(doc, myBucketOrd);
       

      Some bucket aggregations "know" how many ordinals each owning ordinal needs so they can map "densely". The range aggregation, for example, can perform this mapping with something like:

      
       return rangeCount * owningBucketOrd + matchingRange(value);
       
      Other aggregations don't know how many buckets will fall into any particular owning bucket. The terms aggregation, for example, uses LongKeyedBucketOrds which amounts to a hash lookup.
      Throws:
    • isNoop

      public boolean isNoop()
      Does this collector collect anything? If this returns true we can safely just never call collect(int, long).
    • collect

      public final void collect(int doc) throws
      Specified by:
      collect in interface org.apache.lucene.search.LeafCollector
      Throws:
    • setScorer

      public void setScorer(org.apache.lucene.search.Scorable scorer) throws
      Specified by:
      setScorer in interface org.apache.lucene.search.LeafCollector
      Throws: