How to Use Composite Aggregation to do BucketSort
這篇介紹How to Use Composite Aggregation to do BucketSort。
Example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
List<CompositeValuesSourceBuilder<?>> sources = new ArrayList<>(); sources.add(new TermsValuesSourceBuilder("employee").field("employee").missingBucket(true) .order(SortOrder.ASC));
CompositeAggregationBuilder composite = new CompositeAggregationBuilder("my_bucket", sources); composite.subAggregation(AggregationBuilders.sum("salary").field("salary"));
sourceBuilder.query(queryBuilder); sourceBuilder.fetchSource(false); sourceBuilder.aggregation(composite); sourceBuilder.size(0);
FieldSortBuilder salarySort = new FieldSortBuilder("salary").order(SortOrder.DESC); List<FieldSortBuilder> sortList = new ArrayList<>(); sortList.add(salarySort); BucketSortPipelineAggregationBuilder bucketsort = new BucketSortPipelineAggregationBuilder( "salarySortAggs", sortList).from(0).size(10); composite.subAggregation(bucketsort);
String[] indices = ElasticSearchUtils.timeRangeToIndexesDay(INDEX_NAME_PREFIX); SearchResponse searchResponse = ELKManager.search(sourceBuilder, indices);
|
Example說明
1 2 3
| 針對INDEX_NAME_PREFIX裡的employee欄位做group by後 將salary欄位做sum計算,取出的bucket再做order by sum(salary) 即可取出這張表薪水前10的員工功能
|