首页 > 解决方案 > 如何对桶排序结果进行排名?

问题描述

我正在弹性搜索中创建排行榜查询,我有具有父子关系的文档,父文档:玩家子文档:团队一个玩家可以在多个团队中。

我正在计算每个团队的总分并使用桶排序对结果进行排序,并且我得到了正确的排序结果。

我想在排序结果中获得每个团队的排名,例如在每个桶值中的 1000 个团队总计结果中,我应该获得一个类似 Rank: 1 的键,它是该值在 1000 个排序结果中的索引;

这是我目前的尝试:

{
  "size": 0,
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "type": "contest_teams"
          }
        },
        {
          "term": {
            "challenge_id": 212
          }
        }
      ]
    }
  },
  "aggs": {
    "team": {
      "terms": {
        "field": "user_id"
      },
      "aggs": {
        "team_score": {
          "parent": {
            "type": "team_player"
          },
          "aggs": {
            "total_points": {
              "sum": {
                "field": "points"
              }
            }
          }
        },
        "team_points_bucket_sort": {
          "bucket_sort": {
            "sort": [
              {
                "team_score.total_points": {
                  "order": "desc"
                }
              }
            ],
            "size": 2,
            "from": 0
          }
        }
      }
    }
  }
}

标签: elasticsearch

解决方案


推荐阅读