Результаты агрегации гистограммы постфильтрации даты не работают - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть запрос на агрегацию, в котором я пытаюсь рассчитать максимальное стандартное отклонение числа 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-го.

Есть ли другие альтернативные решения?Помощь очень ценится!

...