查询kibana中的top n值

o2g1uqev  于 2021-06-10  发布在  ElasticSearch
关注(0)|答案(1)|浏览(546)

我最近在kibana学习了kql,我想基于id显示前n个值。在这个表中,每个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的top 1,那么就可以很容易地完成。源代码使用max使用max它只取前1个值。如果我们想取一个以上的值,我们怎么做?谢谢您

t9eec4r0

t9eec4r01#

您需要使用术语聚合来获取所有唯一的id,然后执行top hits子聚合来获取每个id的top 2:

{
  "aggs": {
    "ids": {
      "terms": {
        "field": "id",
        "size": 3
      },
      "aggs": {
        "top_reaches": {
          "top_hits": {
            "sort": [
              {
                "reach": {
                  "order": "desc"
                }
              }
            ],
            "_source": {
              "includes": ["reach" ]
            },
            "size": 2
          }
        }
      }
    }
  }
}

如果您事先知道id,则可以使用\u 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"}}]}

相关问题