按汇总排序会在弹性搜索中引发错误

时间:2015-05-08 13:36:47

标签: c# elasticsearch nest

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

如果我尝试如下,聚合结果按doc count排序。

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

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

“machines”是我的嵌套对象,但“所有者”不是嵌套的,它属于父对象。

我需要按所有者机器计数获得前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"
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

我需要总和排序而不是doc count排序。 为了它的工作我可能需要像:

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

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

或者这是弹性搜索的限制吗?还是一个bug?

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

1 个答案:

答案 0 :(得分:0)

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

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

答案是:

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

希望它对其他人有帮助,