Я работаю над проектом, который использует Elasticsearch
для хранения данных и отображения сложной статистики.
У меня есть индекс, который выглядит так:
Reservation {
id: number
check_in: Date
check_out: Date
created_at: Date
// other fields...
}
Мне нужно вычислить среднюю разницу в днях между check_in
и created_at
моими Reservation
в определенном диапазоне дат и показать результат в виде числа.
Я пробовал это query
:
{
"script_fields": {
"avgDates": {
"script": {
"lang": "expression",
"source": "doc['created_at'].value - doc['check_in'].value"
}
}
},
"query": {
"bool": {
"must": [
{
"range": {
"created_at": {
"gte": "{{lastMountTimestamp}}",
"lte": "{{currentTimestamp}}"
}
}
}
]
}
},
"size": 0,
"aggs": {
"avgBetweenDates": {
"avg": {
"field": "avgDates"
}
}
}
}
Поля с датами сохраняются в формате ISO 8601 (например, 2020-03-11T14:25:15+00:00), я не знаю, может ли это вызвать проблемы .
Он ловит несколько попаданий, так что запрос точно работает! но он всегда возвращает null
в качестве значения агрегации avgBetweenDates
.
Мне нужен такой результат:
"aggregations": {
"avgBetweenDates": {
"value": 3.14159 // Π is just an example!
}
}
Любые идеи помогут!
Спасибо.