Elasticsearch排序:每组中的一个并重复

Vit*_*mar 7 sorting elasticsearch

我需要value从每个项目获得最大的项目name并重复直到结束.

我将在简单的例子中解释它.我有这样的项目:

Name| Value
-----------
AAA | 12
AAA | 35
AAA | 5
BBB | 1
BBB | 10
BBB | 5
Run Code Online (Sandbox Code Playgroud)

排序后的预期结果:

Name| Value
-----------
AAA | 35
BBB | 10
AAA | 12
BBB | 5
AAA | 5
BBB | 1
Run Code Online (Sandbox Code Playgroud)

我知道如何在Postgres中执行此操作(窗口函数:) rank() over(),但它是否可以在Elastic?

Mih*_*ave 1

你必须做类似 Group by max 的事情

这是示例

GET /yourindex/_search
{
"size": 0
  "aggs": {
    "yourGroup": {
      "terms": {
        "field": "Name",
        "size": 10
      },
      "aggs": {
        "theMax": {
          "max": {
            "field": "Value"
          }
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

参考:- 这个

  • 按最大值分组,但如何确保一个结果来自一个术语聚合,下一个结果来自另一个术语,依此类推。然后再次从每个聚合的下一个结果开始?您是否实际测试了建议的解决方案? (2认同)