Hi,
in a kibana data table, we want add an 'average' metric, based on a scripted field. As we want to calculate the average only for a part of the dataset, we tried to rely on the default of the missing field behavior for average aggragation...
The
missing
parameter defines how documents that are missing a value should be treated. By default they will be ignored [...] .
The query leaves kibana with somehting like this, where is_enabled
is of type boolean and tags
of type keyword, and any_numeric_field
is a numeric field in the mapping.
{
"aggs": {
"2": {
"aggs": {
"5": {
"avg": {
"field": "any_numeric_field",
"script": "if (!doc['is_enabled'].value) { return null; } else { if (doc['tags']?.contains('some_value')) { return 1; } else { return 0; } }"
}
}
}
}
},
"size": 0,
"stored_fields": [
"*"
],
"script_fields": {},
"_source": {
"excludes": []
},
"query": {
"bool": {
"must": [],
"filter": [
{
"match_all": {}
}
],
"should": [],
"must_not": []
}
}
}
and results in an NullPointerException in Elasticsearch
Caused by: java.lang.NullPointerException
at org.elasticsearch.script.AggregationScript.runAsDouble(AggregationScript.java:142) ~[elasticsearch-7.6.1.jar:7.6.1]
at org.elasticsearch.search.aggregations.support.ValuesSource$Numeric$WithScript$DoubleValues.advanceExact(ValuesSource.java:447) ~[elasticsearch-7.6.1.jar:7.6.1]
at org.elasticsearch.search.aggregations.metrics.AvgAggregator$1.collect(AvgAggregator.java:85) ~[elasticsearch-7.6.1.jar:7.6.1]
at org.elasticsearch.search.aggregations.MultiBucketCollector$MultiLeafBucketCollector.collect(MultiBucketCollector.java:200) ~[elasticsearch-7.6.1.jar:7.6.1]
at org.elasticsearch.search.aggregations.bucket.BestBucketsDeferringCollector.prepareSelectedBuckets(BestBucketsDeferringCollector.java:197) ~[elasticsearch-7.6.1.jar:7.6.1]
at org.elasticsearch.search.aggregations.bucket.DeferringBucketCollector.replay(DeferringBucketCollector.java:45) ~[elasticsearch-7.6.1.jar:7.6.1]
at org.elasticsearch.search.aggregations.bucket.DeferableBucketAggregator.runDeferredCollections(DeferableBucketAggregator.java:103) ~[elasticsearch-7.6.1.jar:7.6.1]
at org.elasticsearch.search.aggregations.bucket.terms.GlobalOrdinalsStringTermsAggregator.buildAggregation(GlobalOrdinalsStringTermsAggregator.java:233) ~[elasticsearch-7.6.1.jar:7.6.1]
at org.elasticsearch.search.aggregations.AggregationPhase.execute(AggregationPhase.java:130) ~[elasticsearch-7.6.1.jar:7.6.1]
at org.elasticsearch.search.query.QueryPhase.execute(QueryPhase.java:140) ~[elasticsearch-7.6.1.jar:7.6.1]
at org.elasticsearch.indices.IndicesService.lambda$loadIntoContext$19(IndicesService.java:1335) ~[elasticsearch-7.6.1.jar:7.6.1]
at org.elasticsearch.indices.IndicesService.lambda$cacheShardLevelResult$20(IndicesService.java:1392) ~[elasticsearch-7.6.1.jar:7.6.1]
at org.elasticsearch.indices.IndicesRequestCache$Loader.load(IndicesRequestCache.java:174) ~[elasticsearch-7.6.1.jar:7.6.1]
at org.elasticsearch.indices.IndicesRequestCache$Loader.load(IndicesRequestCache.java:157) ~[elasticsearch-7.6.1.jar:7.6.1]
at org.elasticsearch.common.cache.Cache.computeIfAbsent(Cache.java:433) ~[elasticsearch-7.6.1.jar:7.6.1]
at org.elasticsearch.indices.IndicesRequestCache.getOrCompute(IndicesRequestCache.java:123) ~[elasticsearch-7.6.1.jar:7.6.1]
at org.elasticsearch.indices.IndicesService.cacheShardLevelResult(IndicesService.java:1398) ~[elasticsearch-7.6.1.jar:7.6.1]
at org.elasticsearch.indices.IndicesService.loadIntoContext(IndicesService.java:1332) ~[elasticsearch-7.6.1.jar:7.6.1]
at org.elasticsearch.search.SearchService.loadOrExecuteQueryPhase(SearchService.java:336) ~[elasticsearch-7.6.1.jar:7.6.1]
at org.elasticsearch.search.SearchService.executeQueryPhase(SearchService.java:358) ~[elasticsearch-7.6.1.jar:7.6.1]
at org.elasticsearch.search.SearchService.lambda$executeQueryPhase$1(SearchService.java:343) ~[elasticsearch-7.6.1.jar:7.6.1]
at org.elasticsearch.action.ActionListener.lambda$map$2(ActionListener.java:146) ~[elasticsearch-7.6.1.jar:7.6.1]
at org.elasticsearch.action.ActionListener$1.onResponse(ActionListener.java:63) ~[elasticsearch-7.6.1.jar:7.6.1]
... 9 more