Elasticsearch嵌套聚合:如何按主桶key排序指定桶后置?
Elasticsearch嵌套聚合主桶自定义排序(将"Special"桶移至末尾)
你可以通过在traits_name_agg的terms聚合中添加自定义脚本排序实现需求,让"Special"桶排在所有主桶的最后。修改后的聚合语句如下:
"traits_agg": { "nested": { "path": "traits" }, "aggs": { "traits_name_agg": { "terms": { "field": "traits.name", "size": 100000, "order": [ { "_script": { "type": "number", "script": { "source": "doc['traits.name'].value == 'Special' ? 1 : 0" }, "order": "asc" } }, { "_key": "asc" } // 可选:非Special桶按key字典序升序排列 ] }, "aggs": { "traits_value_agg": { "terms": { "field": "traits.value", "size": 100000 } } } } } }
逻辑说明:
- 自定义脚本给每个主桶分配排序权重:key为"Special"的桶权重设为1,其他桶设为0
- 按权重升序排序后,权重为0的非"Special"桶会全部排在前面,权重为1的"Special"桶自然落到末尾
- 第二级的
{ "_key": "asc" }是可选配置,用来统一非"Special"桶的排序规则,可根据需求调整或移除
内容的提问来源于stack exchange,提问作者gus
相关产品推荐
相关产品推荐

