Original
 1 @Override
 2 public StringTerms buildAggregation(long owningBucketOrdinal) {
 3     assert owningBucketOrdinal == 0;
 4     final int size = (int) Math.min(bucketOrds.size(), shardSize);
 5 
 6     BucketPriorityQueue ordered = new BucketPriorityQueue(size, order.comparator());
 7     OrdinalBucket spare = null;
 8     for (int i = 0; i < bucketOrds.size(); ++i) {
 9         if (spare == null) {
10             spare = new OrdinalBucket();
11         }
12         bucketOrds.get(i, spare.termBytes);
13         spare.docCount = bucketDocCount(i);
14         spare.bucketOrd = i;
15         spare = (OrdinalBucket) ordered.insertWithOverflow(spare);
16     }
17 
18     final InternalTerms.Bucket[] list = new InternalTerms.Bucket[ordered.size()];
19     for (int i = ordered.size() - 1; i >= 0; --i) {
20         final OrdinalBucket bucket = (OrdinalBucket) ordered.pop();
21         bucket.aggregations = bucketAggregations(bucket.bucketOrd);
22         list[i] = bucket;
23     }
24     return new StringTerms(name, order, requiredSize, Arrays.asList(list));
25 }
26 
Modified
 1 @Override
 2 public StringTerms buildAggregation(long owningBucketOrdinal) {
 3     assert owningBucketOrdinal == 0;
 4     final int size = (int) Math.min(bucketOrds.size(), shardSize);
 5 
 6     BucketPriorityQueue ordered = new BucketPriorityQueue(size, order.comparator(this));
 7     StringTerms.Bucket spare = null;
 8     for (int i = 0; i < bucketOrds.size(); i++) {
 9         if (spare == null) {
10             spare = new StringTerms.Bucket(new BytesRef(), 0, null);
11         }
12         bucketOrds.get(i, spare.termBytes);
13         spare.docCount = bucketDocCount(i);
14         spare.bucketOrd = i;
15         spare = (StringTerms.Bucket) ordered.insertWithOverflow(spare);
16     }
17 
18     final InternalTerms.Bucket[] list = new InternalTerms.Bucket[ordered.size()];
19     for (int i = ordered.size() - 1; i >= 0; --i) {
20         final StringTerms.Bucket bucket = (StringTerms.Bucket) ordered.pop();
21         bucket.aggregations = bucketAggregations(bucket.bucketOrd);
22         list[i] = bucket;
23     }
24     return new StringTerms(name, order, requiredSize, Arrays.asList(list));
25 }
26