Elasticsearch 基数排序错误

Elasticsearch cardinality sorted wrong

当我提出这样的要求时

curl -XGET "http://localhost:9200/log/travels/_search?pretty" -d '                                                                 
{
    "aggs":{
        "travelers":{
            "terms":{
                "field":"traveler",
                "shard_size":0,
                "size":5,
                "order":{
                    "cities":"desc"
                }
            },
            "aggs":{
                "cities":{
                    "nested":{
                        "path":"cities"
                    },
                    "aggs":{
                        "city_count":{
                            "cardinality":{
                                "field":"cities.name"
                            }
                        }
                    }
                }
            }
        }
    }
}'

我收到的响应排序有误,就像这样

"aggregations" : {
    "travelers" : {
      "doc_count_error_upper_bound" : 0,
      "sum_other_doc_count" : 410,
      "buckets" : [ {
        "key" : "patrick",
        "doc_count" : 9,
        "cities" : {
          "doc_count" : 10,
          "city_count" : {
            "value" : 3
          }
        }
      }, {
        "key" : "jonathan",
        "doc_count" : 8,
        "cities" : {
          "doc_count" : 10,
          "city_count" : {
            "value" : 4
          }
        }
      }, {
        "key" : "yosef",
        "doc_count" : 8,
        "cities" : {
          "doc_count" : 10,
          "city_count" : {
            "value" : 4
          }
        }
      }, {
        "key" : "mark",
        "doc_count" : 8,
        "cities" : {
          "doc_count" : 9,
          "city_count" : {
            "value" : 2
          }
        }
      }, {
        "key" : "mike",
        "doc_count" : 7,
        "cities" : {
          "doc_count" : 9,
          "city_count" : {
            "value" : 5
          }
        }
      } ]
    }
  }

我想按旅行城市的数量排序。如果我将基数更改为 value_count,它会正确排序,但我不能那样做,因为它会计算重复项。

如果更多细节对您有帮助,请随时询问。

如果您尝试按 2 级深度子聚合进行排序,order 语法根据 the documentation 略有不同(请查看本段末尾)。

在 ElasticSearch 权威指南的 this part 中也有更清楚的解释。

在你的情况下,像这样的事情应该可以解决问题:

"order":{ "cities>city_count.value":"desc" }

希望对您有所帮助!