我有一堆只有count
字段的文档。
我正在尝试获取按日期汇总的该字段的最新值:
{
"query": {
"match_all": {}
},
"sort": "_timestamp",
"aggs": {
"result": {
"date_histogram": {
"field": "_timestamp",
"interval": "day",
"min_doc_count": 0
},
"aggs": {
"last_value": {
"scripted_metric": {
"params": {
"_agg": {
"last_value": 0
}
},
"map_script": "_agg.last_value = doc['count'].value",
"reduce_script": "return _aggs.last().last_value"
}
}
}
}
}
}
但问题是文档属于last_value
聚合而未按_timestamp
排序,因此我无法保证最后一个值确实是最后一个值。
所以,我的问题:
_timestamp
聚合时,是否可以按last_value
对数据进行排序?答案 0 :(得分:0)
看起来可以稍微调整scripted_metric
聚合来解决问题的第一部分(按_timestamp
排序):
"last_value": {
"scripted_metric": {
"params": {
"_agg": {
"value": 0,
"timestamp": 0
}
},
"map_script": "_agg.value = doc['count'].value; _agg.timestamp = doc['_timestamp'].value",
"reduce_script": "value = 0; timestamp=0; for (a in _aggs) { if(a.timestamp > timestamp){ value = a.value; timestamp = a.timestamp} }; return value;"
}
}
但我仍然怀疑这是解决这个问题的最佳方式。