есть что-то, что я имею в связи с ES (1.7), и я не уверен, как это сделать. Позвольте мне посмотреть, могу ли я показать его с помощью sql и таблицы, возможно, проще перевести на запрос ES. Представьте за столом points_by_dateElasticsearch: сумма операций над ковшом date_range
DATE PURCHASE_COUNT ACCUMULATED_POINTS
day 1 5 548
day 2 8 498
day 3 9 623
day 4 9 635
day 5 13 620
если это таблица, я бы сделать запрос так, чтобы получить то, что мне нужно:
SELECT SUM(q.AVG_POINT_PURCHASE) as POINT_BY_PURCHASE
FROM (
SELECT (ACCUMULATED_POINTS/PURCHASE_COUNT) as AVG_POINT_PURCHASE
FROM points_by_date
) q;
Можно ли это сделать в ES? Мне нужно добавить, что эти операции выполняются над ведрами диапазона дат, что-то вроде этого:
{
"timeout": 1500,
"query": {
"bool": {
"must": [
{
"range": {
"date": {
"from": "2016-12-01",
"to": "2016-12-05",
"include_lower": true,
"include_upper": true
}
}
}
]
}
},
"aggregations": {
"my_ranges": {
"date_range": {
"field": "date",
"ranges": [
{
"from": "2016-12-01",
"to": "2016-12-05"
},
{
"from": "2016-12-06",
"to": "2016-12-10"
}
]
},
"aggregations": {
"TOTAL_POINTS" : {
"sum" : {
"field" : "ACCUMULATED_POINTS"
}
},
"PURCHASE_COUNT" : {
"avg" : {
"field" : "PURCHASE_COUNT"
}
}
}
}
}
}
Каждый диапазон дат, будет представлять собой набор N строки в таблице, откуда мне нужно сделать что математику.
Запрос ES имеет предыдущий подход, в котором я получал средний показатель покупки_количество за ведро, и позже разделил сумму накопленных_поиска ведра на это среднее значение. Теперь мне нужно сначала делить, а затем накопить за ведро. Любая идея, если это возможно и как?
Заранее благодарен!