Elasticsearch基数排序错误

时间:2015-01-26 23:25:26

标签: sorting elasticsearch aggregation cardinality

当我提出这样的请求时

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,它会正确排序,但我不能这样,因为它会计算重复数。

如果有更多细节可以帮助您,请随时提出要求。

1 个答案:

答案 0 :(得分:6)

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

在ElasticSearch权威指南的this part中也更清楚地解释了这一点。

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

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

希望这有帮助!