ElasticSearch агрегация над агрегацией - PullRequest
2 голосов
/ 31 мая 2019

У меня есть индекс ElasticSearch с заказами.Заказ может иметь состояние (например, Создан, Обрабатывается, Подтверждено).Я хочу создать отчет, который показывает количество заказов на штат в месяц.Поэтому я хочу увидеть отчет вроде:

| x     | Created | Processing | Confirmed |
|-------|---------|------------|-----------|
| March |      10 |         15 |         5 |
| April |       8 |          9 |        33 |

Я подумал, что мне нужно сохранить что-то вроде «Исторического заказа», потому что тот же заказ будет создан в марте, но подтвержден в апреле.Поэтому я сохраняю Орден вместе с его состоянием, а также с датой, когда он перешел в это состояние.

Я нашел этот вопрос SO , который показывает, как получить максимальное состояние.Но теперь я не знаю, как агрегировать по этой агрегации и получать количество состояний за период времени.

У меня пока такой запрос выглядит примерно так:

{
  "query": {
    "range": {
      "stateDate": {
        "lte": "2019-05-30"
      }
    }
  }, 
  "aggs": {
    "by_order_id": {
      "terms": {
        "field": "orderId"
      },
      "aggs": {
        "latest_state": {
          "top_hits": {
            "size": 1,
            "sort": {
              "stateDate": "desc"
            },
            "_source": [
              "orderState",
              "stateDate"
            ]
          }
        }
      }
    }
  }
}

Обновление: некоторый пример объекта Order:

{
    "orderId": "1234-5678-abcd", // some guid
    "orderState": "Created|Processing|Confirmed", // enum
    "stateDate": "2019-05-31 10:33" // the date-time when the order transitioned in that state
}

И представьте себе эти записи:

| orderId    | orderState | stateDate  |
|------------|------------|------------|
| 123        | Created    | 2019-05-30 |
| 123        | Processing | 2019-05-31 |
| 123        | Confirmed  | 2019-06-01 |
| 456        | Created    | 2019-06-01 |
| 456        | Processing | 2019-06-01 |

Мне нужен отчет, в котором говорится, что у меня был 1 заказ в обработке в мае (заказ 123,это его окончательный статус в течение мая).В июне следует сказать, что у меня было 1 подтвержденный заказ (123) и 1 в обработке (456).

Надеюсь, теперь все стало понятнее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...