ElasticSearch 聚合结果排序

ElasticSearch 聚合结果排序

简单的指标聚合结果并根据聚合结果排序如下

以接口id聚合,以平均响应时间排序

{
"size": 0,
"aggs": {
"api": {
"terms": {
"field": "api.id",
"order": {
"reponseTime": "asc"
},
"size": 10
},
"aggs": {
"reponseTime": {
"sum": {
"field": "response.time"
}
},
"requestTime": {
"sum": {
"field": "requestTime.time"
}
},
"complexTime": {
"bucket_script": {
"buckets_path": {
"requestTime": "requestTime",
"reponseTime": "reponseTime"
},
"script": "params.requestTime / params.reponseTime"
}
}
}
}
}
}

复杂的指标聚合结果计算后再根据计算结果进行排序如下

想当然写法,其实不行,会报以下错误
The provided aggregation [complexTime] either does not exist, or is a pipeline aggregation and cannot be used to sort the buckets.

{
"size": 0,
"aggs": {
"api": {
"terms": {
"field": "api.id",
"order": {
"complexTime": "asc"
},
"size": 10
},
"aggs": {
"reponseTime": {
"sum": {
"field": "response.time"
}
},
"requestTime": {
"sum": {
"field": "requestTime.time"
}
},
"complexTime": {
"bucket_script": {
"buckets_path": {
"requestTime": "requestTime",
"reponseTime": "reponseTime"
},
"script": "params.requestTime / params.reponseTime"
}
}
}
}
}
}

参考以下页面得到,解决方案
https://github.com/elastic/elasticsearch/issues/8486
https://github.com/elastic/elasticsearch/issues/32153

{
"size": 0,
"aggs": {
"api": {
"terms": {
"field": "api.id"
},
"aggs": {
"reponseTime": {
"sum": {
"field": "response.time"
}
},
"requestTime": {
"sum": {
"field": "requestTime.time"
}
},
"complexTime": {
"bucket_script": {
"buckets_path": {
"requestTime": "requestTime",
"reponseTime": "reponseTime"
},
"script": "params.requestTime / params.reponseTime"
}
},
"sort": {
"bucket_sort": {
"sort": [
{
"complexTime": {
"order": "asc"
},
"requestTime.total": {
"order": "asc"
}
}
],
"size": 10
}
}
}
}
}
}
posted @   临渊不羡渔  阅读(348)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示