У меня есть запрос на агрегацию, в котором я пытаюсь рассчитать максимальное стандартное отклонение числа ips назначения на IP-адрес для определенного временного диапазона.Поскольку всем известна общая проблема с функцией агрегации движущейся функции std_dev, значения std dev первых двух дней всегда будут равны нулю и 0 соответственно, поскольку ранее данные не учитывались.
Вот мой запрос агрегации:
{
"size": 0,
"query": {
"bool": {
"must": [
{
"exists": {
"field": "aggregations.range.buckets.by ip.buckets.by date.buckets.max_dest_ips.value"
}
}
]
}
},
"aggs": {
"range": {
"date_range": {
"field": "Source Time",
"ranges": [
{
"from": "2018-04-25",
"to": "2018-05-02"
}
]
},
"aggs": {
"by ip": {
"terms": {
"field": "IP Address.keyword",
"size": 500
},
"aggs": {
"datehisto": {
"date_histogram": {
"field": "Source Time",
"interval": "day"
},
"aggs": {
"max_dest_ips": {
"sum": {
"field": "aggregations.range.buckets.by ip.buckets.by date.buckets.max_dest_ips.value"
}
},
"max_dest_ips_std_dev": {
"moving_fn": {
"buckets_path": "max_dest_ips",
"window": 3,
"script": "MovingFunctions.stdDev(values, MovingFunctions.unweightedAvg(values))"
}
}
}
}
}
}
}
}
},
"post_filter": {
"range": {
"Source Time": {
"gte": "2018-05-01"
}
}
}
}
Вот фрагмент ответа:
{
"key": "192.168.0.1",
"doc_count": 6,
"datehisto": {
"buckets": [
{
"key_as_string": "2018-04-25T00:00:00.000Z",
"key": 1524614400000,
"doc_count": 1,
"max_dest_ips": {
"value": 309
},
"max_dest_ips_std_dev": {
"value": null
}
},
{
"key_as_string": "2018-04-26T00:00:00.000Z",
"key": 1524700800000,
"doc_count": 1,
"max_dest_ips": {
"value": 529
},
"max_dest_ips_std_dev": {
"value": 0
}
},
{
"key_as_string": "2018-04-27T00:00:00.000Z",
"key": 1524787200000,
"doc_count": 1,
"max_dest_ips": {
"value": 408
},
"max_dest_ips_std_dev": {
"value": 110
}
},
{
"key_as_string": "2018-04-28T00:00:00.000Z",
"key": 1524873600000,
"doc_count": 1,
"max_dest_ips": {
"value": 187
},
"max_dest_ips_std_dev": {
"value": 89.96419040682551
}
}
]
}
}
То, что я хочу, это первые 2 дня'Данные корзины (25-е и 26-е) должны быть отфильтрованы и удалены из приведенных выше результатов корзины. Я пробовал пост-фильтр выше и обычный фильтр запросов ниже:
"filter": {
"range": {
"Source Time": {
"gte": "2018-04-27"
}
}
}
Пост-фильтр ничего не делаети не работает.Вышеупомянутый запрос диапазона фильтра заставляет сегменты начинаться с 27-го числа, но также заставляет вычисления стандартного отклонения начинаться с 27-го (в результате 27-е становится нулевым, а 28-е - 0), когда я хочу, чтобы оно начиналось с 25-го.
Есть ли другие альтернативные решения?Помощь очень ценится!