我有以下格式的数据
src_ip dst_ip size
1.1.1.1 2.2.2.2 80
我尝试使用弹性来达到与SQL statememt相同的结果
select src_ip, dst_ip, sum(size) from table order by sum(size) limit 1:10
换句话说,我试图在src_ip和dst_ip聚合后获得前10名结果。
我知道我可以像下面那样做桶聚合:
"aggs":
{
"SRC_IP":
{
"terms": { "field": "SRC_IP"},
"aggs":
{
"DST_IP":
{
"terms": { "field": "DST_IP"} ,
"aggs":
{
"totalPACKETS": { "sum": { "field": "PACKETS" } }
}
}
}
}
}
问题是,通过这种方式,结果不按sum(大小)排序。即使我添加了一个order子句,它只能在一个存储桶中按sum(size)排序,而不是在全局范围内排序。
任何人都可以告诉你该怎么做吗?
答案 0 :(得分:0)
可以使用脚本功能完成。例如:
"aggs":
{
"SRC_DST":
{
"terms": {"script": "[doc.SRC_IP.value, doc.DST_IP.value].join(\"-\")","size": 2,"shard_size":0, "order": {"sum_bits": "desc"}},
"aggs": { "sum_bits": { "sum": {"field": "BYTES"} } }
}
}