Укажите ключ сегмента, чтобы начать с указанного значения в гистограмме даты упругого поиска (6.7) - PullRequest
1 голос
/ 11 июля 2019

У меня есть индекс в упругом поиске, в котором хранятся системные оповещения. Этот индекс имеет такие значения, как startTime и endTime of alert. Мне нужно получить гистограмму даты, которая указывает ежечасно / ежечасные появления предупреждений за указанный промежуток времени. Для получения я использовал следующий запрос:

GET ocm_alert/_search
{
  "size": 0,
  "query": {
    "bool": {
      "filter": [

        {
          "range": {
            "endTime": {
              "from": 1561393800000,
              "to": null,
              "include_lower": true,
              "include_upper": true,
              "boost": 1
            }
          }
        },
        {
          "range": {
            "startTime": {
              "from": null,
              "to": 1562828606000,
              "include_lower": true,
              "include_upper": false,
              "boost": 1
            }
          }
        }
      ],
      "adjust_pure_negative": true,
      "boost": 1
    }
  },
  "aggregations": {
    "aggs_by_time": {
      "date_histogram": {
        "script": {
          "source": "long startTime = doc['startTime'].value.toInstant().toEpochMilli(); long endTime = doc['endTime'].value.toInstant().toEpochMilli(); List dates = new ArrayList();  long rangeFrom = startTime < 1561116600000l ? 1561116600000l : startTime; long rangeTo = endTime > 1562828606000l ? 1562828606000l : endTime; for(long date = rangeFrom; date < rangeTo ; date+=3600000){dates.add(date)} dates.add(rangeTo);return dates;",
          "lang": "painless"
        },
        "interval": "1h",
        "offset": 0,
        "order": {
          "_key": "asc"
        },
        "keyed": false,
        "min_doc_count": 1
      },
      "aggregations": {
        "aggs_by_severity": {
          "min": {
            "field": "severity"
          }
        }
      }
    }
  }
}

Результат в порядке, но ключ в результате вычисляется с использованием поля даты, которое я вычислил в сценарии. Например, если время начала оповещения 12:15:00, то ключ рассчитывается как 11:30:00, а второй ключ - 12:30:00. Но мне нужно запустить значения ключей на основе startTime, который я указал в запросе, например, 12:00:00. Таким образом, ключи агрегации: 12:00:00, 13: 00: 00.

1 Ответ

0 голосов
/ 12 июля 2019

Я полагаю, немного хака, или вот как это должно быть сделано. Я рассчитал значение смещения на основе начального времени, указанного в предложении запроса, и добавил смещение к агрегации гистограммы даты вместе с часовым поясом, и это сработало.

...