我最近在kibana中学习了KQL,我想显示基于id的前n个值。在这个表中,每个id可以有不同的覆盖范围。我希望看到每个ID的前2个最大范围。我有这个表格作为例子:
id reach
1 10
1 12
1 3
3 7
1 13
3 12
3 90
4 12
如何根据覆盖范围选择前2名。目标:
id reach
1 12
1 10
3 90
3 12
4 12
如果我只想使用基于此源的Max Aggregate排名前1,那么这可以很容易地完成。使用最大值的源使用max,它只取前1个值。如果我们想要取一个以上的值,我们该怎么做?谢谢
您需要使用术语聚合来获得所有唯一的ID,然后进行热门子聚合以获得每个ID的TOP2:
{
"aggs": {
"ids": {
"terms": {
"field": "id",
"size": 3
},
"aggs": {
"top_reaches": {
"top_hits": {
"sort": [
{
"reach": {
"order": "desc"
}
}
],
"_source": {
"includes": ["reach" ]
},
"size": 2
}
}
}
}
}
}
如果您事先知道ID,则可以使用_msearch按每个ID发出查询:
GET test-index/_msearch
{ }
{"size":2,"query" : {"term" : 1}, "sort": [{"reach": {"order": "desc"}}]}
{ }
{"size":2,"query" : {"term" : 2}, "sort": [{"reach": {"order": "desc"}}]}
{ }
{"size":2,"query" : {"term" : 3}, "sort": [{"reach": {"order": "desc"}}]}