У меня есть данные о ежедневных продажах, проиндексированные в Elasticsearch. Я успешно запускаю ряд агрегаций для определения лидеров продаж в диапазоне дат и т. д.
Теперь я пытаюсь написать один запрос, чтобы сделать следующее:
- Определить n лучших продавцов за диапазон дат (период A)
- Возьмите результаты периода A и просуммируйте продажи этих продуктов за второй диапазон дат (период B).
- Сравните продажи в период A с периодом B и определите те, в которых процентное увеличение превышает X%.
Моя попытка до сих пор:
{
"query": {
"bool": {
"filter": [
{
"range": {
"date": {
"gte": "2017-10-01",
"lte": "2017-10-14"
}
}
}
]
}
},
"size": 0,
"aggs": {
"data_split": {
"terms": {
"size": 10,
"field": "product_id"
},
"aggs": {
"date_periods": {
"date_range": {
"field": "date",
"format": "YYYY-MM-dd",
"ranges": [
{
"from": "2017-10-01",
"to": "2017-10-07"
},
{
"from": "2017-10-08",
"to": "2017-10-14"
}
]
},
"aggs": {
"product_id_split": {
"terms": {
"field": "product_id"
},
"aggs": {
"unit_sum": {
"sum": {
"field": "units"
}
}
}
}
}
}
}
}
}
}
Хотя это выводит результаты для двух периодов, я не думаю, что это совсем то, что мне нужно, поскольку первоначальный фильтр работает от даты начала периода A до даты окончания периода B, и я думаю, что результаты суммируются для этого диапазона, а не только для периода A. Я также не получаю сравнения%, я, вероятно, сделал бы это на уровне своего приложения, но я понимаю, что это может быть обработано с помощью скриптового эластичного запроса?
Было бы особенно здорово, если бы вместо первых n результатов в период А я мог установить порог продаж, скажем, в 1000 продаж.
Любые указатели будут высоко оценены. Заранее спасибо!
В настоящее время работает Elastic 5.6.