在kibana中查询前n个值



我最近在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"}}]}

相关内容

  • 没有找到相关文章

最新更新