我需要根据ElasticSearch Terms聚合对存储桶进行排序。 下面是ElasticSearch
中的一个索引记录{"personId":"10","Salary":10000, "Age":20, "personName":"xyz"}
我在字段Salary上使用Terms聚合。以下是聚合ElasticSearch查询的条款:
{
"aggs" : {
"genders" : {
"terms" : {
"field" : "Salary"
}
}
}
}
此查询根据Salary值返回存储桶。可以使用查询以下的顺序对这些存储桶进行排序:
{
"aggs" : {
"genders" : {
"terms" : {
"field" : "gender",
"order" : { "_term" : "asc" }
}
}
}
}
但我需要在任何字段Age
(非字段字段)上对存储桶进行排序,有什么方法可以做到吗?
答案 0 :(得分:1)
聚合的重点是将文档“分派”到桶中,每个桶都由terms
聚合的声明字段定义,在您的情况Salary
中。
您在响应中获得的存储桶不再是文档。例如,在广告文件10000
中,您将获得具有Salary: 10000
的文档计数,并且您将拥有与所有文档中的不同Salary
值一样多的存储桶(默认情况下只有10个桶)。
因此,由于存储桶不是文档,并且由于存储桶可以聚合具有不同Age
值的文档,因此您不清楚如何按Salary
排序Age
存储桶}。
也许,其中一种方法可能是在terms
字段上添加Age
子聚合,因此您获得最高Salary
个桶以及低于Age
桶。然后,您可以按照自己想要的方式对Salary
/ Age
个水桶对进行排序。