按总和排序聚合在弹性搜索中抛出错误

Order by sum aggregation throws error in elastic search

我正在尝试通过应用另一个进行求和的聚合来对聚合结果进行排序,然后通过降序到该总和来应用顺序。

如果我像下面那样尝试,聚合结果将按文档计数排序。

"order": {
    "revrsenestedowners": "desc"
}

下面的代码解释了我面临的问题。 (更改字段名称只是为了说明问题)

"machines" 是我的嵌套对象,但 "owners" 不是嵌套的,它属于父对象。

我需要根据所有者机器数获取前 10 台机器名称(需要求和,因为所有者对象是列表并且可以有多个值)。

{
  "query": {
    "range": {
      "createdDate": {
        "gte": "2015-04-28T00:00:00",
        "lte": "2015-05-01T23:59:59"
      }
    }
  },
  "aggs": {
    "nestedagg": {
      "nested": {
        "path": "machines"
      },
      "aggs": {
        "terms": {
          "terms": {
            "field": "machines.machineName",
            "size": 10,
              "order": {
                  "sumowners": "desc"
               }
          },
          "aggs": {
            "revrsenestedowners": {
              "reverse_nested": {},
              "aggs": {
                "sumowners": {
                  "sum": {
                    "field": "owners.machinesCount"
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

我需要总和排序而不是单据计数排序。 为了让它工作,我可能需要类似的东西:

"order": {
    "revrsenestedowners.sumowners": "desc"
}

有没有办法实现我正在寻找的东西。

或者这是弹性搜索的限制?还是错误?

我被困住了,非常感谢任何帮助

我在弹性搜索论坛上提出了同样的问题,他们用正确的语法回复了,

https://github.com/elastic/elasticsearch/issues/11059

答案是:

"order": {
    "revrsenestedowners > sumowners.value" : "desc"
}

希望对其他人有所帮助,