过滤器聚合内的bucket_script引发错误

我正在尝试在过滤器聚合块中过滤空桶,并且从elasticsearch收到错误。没有这个,响应将是巨大的,因为我正在查询大量指标和嵌套聚合(为简单起见,这是较大查询的一部分)

GET index/type/_search?ignore_unavailable

{

"size": 0,

"aggs": {

"groupby_country": {

"terms": {

"field": "country",

"size": 2000

},

"aggs": {

"exists__x__filter": {

"filter": {

"bool": {

"filter": [

{

"exists": {

"field": "x"

}

}

]

}

},

"aggs": {

"sum": {

"sum": {

"script": "def val = doc['x'].value; if(val>0) Math.min(val , 20000)"

}

},

"average_distinct": {

"bucket_script": {

"buckets_path": {

"count": "_count"

},

"script": "return params.count "

}

}

}

}

}

}

}

}

弹性反应:

{

"error": {

"root_cause": [],

"type": "reduce_search_phase_exception",

"reason": "[reduce] ",

"phase": "fetch",

"grouped": true,

"failed_shards": [],

"caused_by": {

"type": "class_cast_exception",

"reason": "org.elasticsearch.search.aggregations.bucket.filter.InternalFilter cannot be cast to org.elasticsearch.search.aggregations.InternalMultiBucketAggregation"

}

},

"status": 503

}

我想做的是:如果对于给定的国家/地区存储区,则没有字段x(例如,国家UK-2个文档没有“ x”字段),请勿将国家/地区存储区返回给客户。

回答:

bucket_selector为此,您需要一个脚本,而脚本则在较高级别上稍有不同:

{

"size": 0,

"aggs": {

"groupby_country": {

"terms": {

"field": "country",

"size": 2000

},

"aggs": {

"exists__x__filter": {

"filter": {

"bool": {

"filter": [

{

"exists": {

"field": "x"

}

}

]

}

},

"aggs": {

"sum": {

"sum": {

"script": "def val = doc['x'].value; if(val>0) Math.min(val , 20000)"

}

}

}

},

"average_distinct": {

"bucket_selector": {

"buckets_path": {

"count": "exists__x__filter._count"

},

"script": "params.count > 0"

}

}

}

}

}

}

以上是 过滤器聚合内的bucket_script引发错误 的全部内容, 来源链接: utcz.com/qa/424722.html

回到顶部