ElasticSearch - 在嵌套字段上通过嵌套聚合对聚合进行排序

时间:2017-04-17 12:38:44

标签: elasticsearch elasticsearch-5

{
  "query": {
    "match_all": {}
  },
  "from": 0,
  "size": 0,
  "aggs": {
    "itineraryId": {
      "terms": {
        "field": "iid",
        "size": 2147483647,
        "order": [
          {
            "price>price>price.max": "desc"
          }
        ]
      },
      "aggs": {
        "duration": {
          "stats": {
            "field": "drn"
          }
        },
        "price": {
          "nested": {
            "path": "prl"
          },
          "aggs": {
            "price": {
              "filter": {
                "terms": {
                  "prl.cc.keyword": [
                    "USD"
                  ]
                }
              },
              "aggs": {
                "price": {
                  "stats": {
                    "field": "prl.spl.vl"
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

在这里,我收到错误“无效的条款汇总顺序路径[价格>价格> price.max]。条款存储区只能在由零个或多个单存储桶聚合构建的子聚合器路径上排序路径内的最终单桶或度量聚合。子路径[price]指向非单桶聚合“

如果按照

之类的持续时间聚合排序,

查询工作正常

"order": [
      {
        "duration.max": "desc"
      }

那么有没有办法在嵌套字段上通过嵌套聚合对聚合进行聚合,如下所示?

"order": [
      {
        "price>price>price.max": "desc"
      }

1 个答案:

答案 0 :(得分:0)

正如Val在评论中指出的那样,ES还不支持它。

直到那时你可以先聚合嵌套聚合,然后使用反向嵌套聚合来聚合文档根目录中的持续时间。

https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-reverse-nested-aggregation.html