Агрегированная операция в ElasticSearch - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть постановка задачи, в которой у меня есть данные о транспортном средстве в Es, время поля в секундах, время в миллисекундах и скорость.Теперь я хочу получить данные и построить график зависимости графика времени от внешнего интерфейса.Но проблема в том, что существует много точек данных, поскольку в течение одной секунды вводятся 30-40 миллисекунд, а также соответствующая скорость.Теперь, чтобы уменьшить точки данных, я хочу получить среднее значение скоростей за одну секунду, чтобы у меня была только одна точка данных на одну секунду.Как я могу добиться этого в Es.

1 Ответ

0 голосов
/ 05 февраля 2019

Учитывая, что ваше отображение выглядит следующим образом -

{
  "properties": {
    "ms": {
      "type": "integer"
    },
    "seconds": {
      "type": "integer"
    },
    "velocity": {
      "type": "text",
      "fields": {
        "keyword": {
          "type": "keyword",
          "ignore_above": "256"
        }
      }
    }
  }
}

Будет работать приведенная ниже вложенная агрегация - вы получите свои точки данных в поле "averageMsInSecond".

{
  "size": 0,
  "aggs": {
    "seconds_buckets": {
      "terms": {
        "field": "seconds"
      },
      "aggs": {
        "averageMsInSecond": {
          "avg": {
            "field": "ms"
          }
        }
      }
    }
  }
}

Чтобы получитьсреднее значение за секунду, вам нужно прочитать ключ в агг секундах и использовать его вместе со средним значением MsInSecond.

Надеюсь, это поможет.

...