如何为以下SQL查询编写有效的ES查询?
Select sum(visits) visits
from index
group by ip, port
order by visits desc
limit 10
我正在使用ES查询,但这将命令访问端口桶。在通过目的地IP和端口对它们进行分组后,我无法获得热门访问。
"aggregations" : {
"ip":
{
"terms":
{
"field": "ip",
"size": 10
},
"aggregations":
{
"port":
{
"terms":
{
"field": "port",
"size": 0,
"order":
{
"visits": "desc"
}
},
"aggregations":
{
"visits":
{
"sum":
{
"field": "visits"
}
}
}
}
}
}
}
有人可以帮我这个吗?
感谢。
答案 0 :(得分:-1)
Elasticsearch中的数据
ip port visits
1.1.1.1 80 10
1.1.1.2 80 10
1.1.1.1 80 20
1.1.1.3 20 100
1.1.1.1 57 20
1.1.1.1 57 200
ES回复
1.1.1.1
57 200
80 50
1.1.1.2
80 10
1.1.1.3
20 100
<强>预期强>
1.1.1.1
57 200
1.1.1.3
20 100
1.1.1.1
80 50
1.1.1.2
80 10
ES的作用是,首先按IP和按端口分组,最后将访问总和并通过端口聚合器内的desc安排访问。因此,这不会给出前10名访问,而是会在每个端口内排名前10位
<强>解强>:
使用脚本合并两个字段并按
应用分组 {
"size": 0,
"aggs": {
"destination": {
"terms": {
"script": "doc['ip'].value + ':' + doc['port'].value", "order": {
"visits": "desc"
}
},
"aggregations":
{
"visits":
{
"sum":
{
"field": "visits"
}
}
}
}
}
}
希望这会有所帮助。