如何在REST API中对两个变量求和并按求和结果排序?
解决方案:基于两个聚合字段的求和结果排序
你需要借助Elasticsearch的bucket_script聚合来计算两个求和字段的总和,然后基于这个总和对桶进行排序。下面是修改后的完整聚合请求:
"aggs": { "genres": { "terms": { "field": "L7_PROTO_NAME.keyword", "order": { "sum_bytes": "desc" } }, "aggs": { "in_bytes": { "sum": { "field": "IN_BYTES" } }, "out_bytes": { "sum": { "field": "OUT_BYTES" } }, "sum_bytes": { "bucket_script": { "buckets_path": { "in": "in_bytes", "out": "out_bytes" }, "script": "params.in + params.out" } } } } }
关键改动说明:
- 新增了
sum_bytes子聚合,类型为bucket_script:buckets_path用来指定要引用的子聚合结果(这里对应之前定义的in_bytes和out_bytes求和聚合)script部分编写简单的求和逻辑,将两个字段的数值相加
- 在
terms聚合的order参数中,直接引用这个新生成的sum_bytes聚合结果进行降序排序
这样执行聚合请求后,就能得到按IN_BYTES和OUT_BYTES总和从大到小排序的L7_PROTO_NAME.keyword分组结果了。
内容的提问来源于stack exchange,提问作者張皓翔
相关产品推荐
相关产品推荐

