在kibana中查询前n个值
Query top n value in kibana
最近在kibana学习KQL,想根据id显示前n个值。
在这个 table 中,每个 id 可以有不同的覆盖面。我希望看到每个 ID 的前 2 个最大覆盖面。我以这个 table 为例:
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 名,则可以轻松完成。 source using max
使用 max 它只取前 1 个值。
如果我们想获取超过 1 个值,我们该怎么做?
谢谢
您需要使用术语聚合来获取所有唯一 ID,然后执行 top-hits sub-aggregation 以获得每个 ID 的前 2 个:
{
"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"}}]}
最近在kibana学习KQL,想根据id显示前n个值。 在这个 table 中,每个 id 可以有不同的覆盖面。我希望看到每个 ID 的前 2 个最大覆盖面。我以这个 table 为例:
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 名,则可以轻松完成。 source using max 使用 max 它只取前 1 个值。 如果我们想获取超过 1 个值,我们该怎么做? 谢谢
您需要使用术语聚合来获取所有唯一 ID,然后执行 top-hits sub-aggregation 以获得每个 ID 的前 2 个:
{
"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"}}]}