当我提出这样的请求时
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,它会正确排序,但我不能这样,因为它会计算重复数。
如果有更多细节可以帮助您,请随时提出要求。
答案 0 :(得分:6)
如果您尝试按2级深度子聚合排序,order
语法根据the documentation略有不同(请查看段落末尾)。
在ElasticSearch权威指南的this part中也更清楚地解释了这一点。
在你的情况下,这样的事情可以解决问题:
"order":{ "cities>city_count.value":"desc" }
希望这有帮助!