是否可以在非术语字段的术语聚合响应中对存储桶进行排序?

时间:2015-05-19 11:09:28

标签: elasticsearch aggregation

我需要根据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(非字段字段)上对存储桶进行排序,有什么方法可以做到吗?

1 个答案:

答案 0 :(得分:1)

聚合的重点是将文档“分派”到桶中,每个桶都由terms聚合的声明字段定义,在您的情况Salary中。

您在响应中获得的存储桶不再是文档。例如,在广告文件10000中,您将获得具有Salary: 10000的文档计数,并且您将拥有与所有文档中的不同Salary值一样多的存储桶(默认情况下只有10个桶)。

因此,由于存储桶不是文档,并且由于存储桶可以聚合具有不同Age值的文档,因此您不清楚如何按Salary排序Age存储桶}。

也许,其中一种方法可能是在terms字段上添加Age子聚合,因此您获得最高Salary个桶以及低于Age桶。然后,您可以按照自己想要的方式对Salary / Age个水桶对进行排序。