我需要对ElasticSearch术语聚合的结果中的存储桶进行排序。下面是ElasticSearch中的一条索引记录
{"personId":"10","Salary":10000, "Age":20, "personName":"xyz"}
我在现场工资上使用术语聚合。以下是聚合ElasticSearch查询的术语:
{
"aggs" : {
"genders" : {
"terms" : {
"field" : "Salary"
}
}
}
}
此查询根据薪资值返回存储桶。这些存储桶可以使用以下查询对工资值进行排序:
{
"aggs" : {
"genders" : {
"terms" : {
"field" : "gender",
"order" : { "_term" : "asc" }
}
}
}
}
但是我需要在任何字段Age
(非术语字段)上对存储桶进行排序,有什么方法可以做到吗?
发布于 2015-05-19 21:57:25
聚合的全部目的是将文档“分派”到存储桶中,每个存储桶由terms
聚合的声明字段定义,在本例中为Salary
。
您在响应中获得的存储桶不再是文档。例如,在存储桶10000
中,您将获得具有Salary: 10000
的文档的计数,并且您将拥有与所有文档中不同的Salary
值一样多的存储桶(尽管默认情况下只有10个存储桶)。
因此,由于存储桶不是文档,并且存储桶可以聚合具有不同Age
值的文档,因此不清楚您希望如何按Age
对Salary
存储桶进行排序。
也许,解决这个问题的一种方法是在Age
字段上添加一个terms
子聚合,这样您就可以获得顶级的Salary
存储桶,而在其下面的存储桶则可以获得Age
存储桶。然后,您可以以任何想要的方式对Salary
/Age
存储桶对进行排序。
https://stackoverflow.com/questions/30323937
复制相似问题