我正在尝试在elasticsearch中执行以下查询。场景是我在文档中有一个字段,该字段包含3个子字段:time1,time2和id,该字段是具有上述字段的对象的数组。
我想计算所有项目的黑白时间2和时间1的平均值。
正在执行的查询是:
`{
"query":{"match_all":{}},
"aggs":{
"total_time_diff":{
"nested":{"path":"diff_list"},
"aggs":{
"diff_r":{
"sum":"doc['time2'].date.getMills()-doc['time1'].date.getMills()"
}
}
},
// Here I need average of the sum which is calculated in total_time_diff "sum" aggregation
"avg_diff":{
"avg_bucket":{"buckets_path":"total_time_diff"}
}
}
}`
我遇到以下错误:
{
"error": {
"root_cause": [],
"type": "search_phase_execution_exception",
"reason": "",
"phase": "fetch",
"grouped": true,
"failed_shards": [],
"caused_by": {
"type": "class_cast_exception",
"reason": "org.elasticsearch.search.aggregations.bucket.nested.InternalNested cannot be cast to org.elasticsearch.search.aggregations.InternalMultiBucketAggregation"
}
},
"status": 503
}
索引映射
{
"my_index": {
"mappings": {
"response_index": {
"date_detection": false,
"diff_list": {
"type": "nested",
"properties": {
"age": {
"type": "long"
},
"time2": {
"type": "date"
},
"time1": {
"type": "date"
},
"id": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
}
}
}
}
先谢谢您。
答案 0 :(得分:0)
"aggs":{
"diff_r":{
"sum":"doc['time2'].date.getMills()-doc['time1'].date.getMills()"
}
}
不是存储区选择器,因此total_time_diff在上一个聚合(avg_diff)中不起作用。
改为使用脚本(如)
"script": "doc['time2'].date.getMills()-doc['time1'].date.getMills()"
让我们知道这句话。
答案 1 :(得分:0)
我在这里为您的问题找到了不同的解决方案。而不是在脚本中求和,然后寻找存储桶脚本聚合来对其进行处理。我使用average script aggregation并使用脚本。
平均存储桶聚合不适用于此同级聚合,因为合计总和不是multi bucket aggregation。
我对脚本进行了一些更改,以计算两个日期字段之间的差异。以下查询将为您工作。
{
"size": 0,
"aggs": {
"total_time_diff": {
"nested": {
"path": "diff_list"
},
"aggs": {
"diff_r": {
"avg": {
"script": {
"source": "doc['diff_list.time2'].value.millis - doc['diff_list.time1'].value.millis"
}
}
}
}
}
}
}
希望这对您有用。