![](/img/trans.png)
[英]How to parse the buckets key values of an ElasticSearch Aggregations query to a list of integers in C#
[英]ElasticSearch - Aggregations: filtering and sorting buckets
使用ElasticSearch 5.2
例如,我将使用一个代表世界上所有人的数据库。
示例请求:获取30岁以上的每个人的平均工资(按国家/地区分组)。 (回复应包含平均工资最高的10个国家/地区)
我采取的建立聚合查询的步骤:
filter: age > 30
) country
” salary
”字段上使用“平均”指标 我面临的问题是我可以在聚合之前应用过滤器,也可以对存储桶进行排序,但是似乎ES不允许我同时执行这两项操作?
换句话说:我无法在“ myInnerAggregation
”上应用“ order
”查询,因为它前面myInnerAggregation
“ myFilterAggregation
”
GET myIndex/_search
{
"size":0,
"aggs": {
"myAggregation": {
"terms": {
"size":10,
"field": "country",
"order": [
{
"myInnerAggregation": "desc"
// I cannot specify "myInnerAggregation" here, only
// "myFilterAggregation" (because it's out of scope I guess)
}
]
},
"aggs": {
"myFilterAggregation": {
"filter": { /* age > 30 (filter syntax is not the problem)*/},
"aggs": {
"myInnerAggergation": {
"avg": {
"field": "salary"
}
}
}
}
}
}
}}
我已经看到ES 6.1+支持“ bucket_sort
”,这可能会解决此问题,但是我不敢相信ES 5.2无法处理像这样的简单聚合?
尝试将过滤器移至请求的query
部分。 您不必将过滤器声明为聚合,聚合尊重您请求的query
部分中定义的过滤器。 希望以此方式可以解决您的问题。
这应该可以解决问题:
"order": [
{
"MyFilterAggregation>MyInnerAggregation": "desc"
}
]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.