Class TopBucketBuilder<B extends InternalMultiBucketAggregation.InternalBucket>
BucketOrder
.-
Field Summary
-
Method Summary
Modifier and TypeMethodDescriptionabstract void
add
(DelayedBucket<B> bucket) Add a bucket if it is competitive.build()
Return the most competitive buckets sorted by the comparator.static <B extends InternalMultiBucketAggregation.InternalBucket>
TopBucketBuilder<B>build
(int size, BucketOrder order, Consumer<DelayedBucket<B>> nonCompetitive) Create aTopBucketBuilder
to build a list of the top buckets.
-
Field Details
-
nonCompetitive
protected final Consumer<DelayedBucket<B extends InternalMultiBucketAggregation.InternalBucket>> nonCompetitive
-
-
Method Details
-
build
public static <B extends InternalMultiBucketAggregation.InternalBucket> TopBucketBuilder<B> build(int size, BucketOrder order, Consumer<DelayedBucket<B>> nonCompetitive) Create aTopBucketBuilder
to build a list of the top buckets.If there are few required results we use a
TopBucketBuilder.PriorityQueueTopBucketBuilder
which is simpler and when the priority queue is full but allocatessize + 1
slots in an array. If there are many required results we prefer aTopBucketBuilder.BufferingTopBucketBuilder
which doesn't preallocate and is faster for the firstsize
results. But it's a little slower when the priority queue is full.It's important for this not to preallocate a bunch of memory when
size
is very very large because this backs the reduction of theterms
aggregation and folks often set thesize
of that to something quite large. The choice in the paragraph above handles this case.- Parameters:
size
- the requested size of the listorder
- the sort order of the bucketsnonCompetitive
- called with non-competitive buckets
-
add
Add a bucket if it is competitive. If there isn't space but the bucket is competitive then this will drop the least competitive bucket to make room for the new bucket.Instead of operating on complete buckets we this operates on a wrapper containing what we need to merge the buckets called
DelayedBucket
. We can evaluate some common sort criteria directly on the DelayedBuckets so we only need to merge exactly the sub-buckets we need. -
build
Return the most competitive buckets sorted by the comparator.
-