@@ -466,33 +466,45 @@ For backward compatibility, we disable the merge sort and use ({@link InternalTe
466466 final Comparator <MultiBucketsAggregation .Bucket > cmp = order .comparator ();
467467 if (size < reducedBuckets .size ()) {
468468 ArrayUtil .select (reducedBucketsArr , 0 , reducedBuckets .size (), size , cmp );
469- }
470- int selectedSize = 0 ;
471- for (B bucket : reducedBucketsArr ) {
472- if (sumDocCountError == -1 ) {
473- bucket .setDocCountError (-1 );
474- } else {
475- final long finalSumDocCountError = sumDocCountError ;
476- bucket .setDocCountError (docCountError -> docCountError + finalSumDocCountError );
477- }
478- if (bucket .getDocCount () >= localBucketCountThresholds .getMinDocCount ()) {
479- B removed = ((selectedSize == size ) ? bucket : null );
480- if (removed != null ) {
481- otherDocCount += removed .getDocCount ();
482- reduceContext .consumeBucketsAndMaybeBreak (-countInnerBucket (removed ));
469+ int selectedSize = 0 ;
470+ for (B bucket : reducedBucketsArr ) {
471+ if (sumDocCountError == -1 ) {
472+ bucket .setDocCountError (-1 );
483473 } else {
484- selectedSize ++;
485- reduceContext .consumeBucketsAndMaybeBreak (1 );
474+ final long finalSumDocCountError = sumDocCountError ;
475+ bucket .setDocCountError (docCountError -> docCountError + finalSumDocCountError );
476+ }
477+ if (bucket .getDocCount () >= localBucketCountThresholds .getMinDocCount ()) {
478+ B removed = ((selectedSize == size ) ? bucket : null );
479+ if (removed != null ) {
480+ otherDocCount += removed .getDocCount ();
481+ reduceContext .consumeBucketsAndMaybeBreak (-countInnerBucket (removed ));
482+ } else {
483+ selectedSize ++;
484+ reduceContext .consumeBucketsAndMaybeBreak (1 );
485+ }
486+ } else {
487+ reduceContext .consumeBucketsAndMaybeBreak (-countInnerBucket (bucket ));
486488 }
487- } else {
488- reduceContext .consumeBucketsAndMaybeBreak (-countInnerBucket (bucket ));
489489 }
490- }
491- if (selectedSize != size ) {
492490 list = createBucketsArray (selectedSize );
493491 System .arraycopy (reducedBucketsArr , 0 , list , 0 , selectedSize );
494492 } else {
493+ // since only else case possible is size == reducedBuckets.size() we can use the entire list of reduced buckets
495494 list = reducedBucketsArr ;
495+ for (B bucket : reducedBucketsArr ) {
496+ if (sumDocCountError == -1 ) {
497+ bucket .setDocCountError (-1 );
498+ } else {
499+ final long finalSumDocCountError = sumDocCountError ;
500+ bucket .setDocCountError (docCountError -> docCountError + finalSumDocCountError );
501+ }
502+ if (bucket .getDocCount () >= localBucketCountThresholds .getMinDocCount ()) {
503+ reduceContext .consumeBucketsAndMaybeBreak (1 );
504+ } else {
505+ reduceContext .consumeBucketsAndMaybeBreak (-countInnerBucket (bucket ));
506+ }
507+ }
496508 }
497509 Arrays .sort (list , cmp );
498510 } else {
0 commit comments