Отфильтруйте результаты поиска по времени - PullRequest
0 голосов
/ 24 мая 2018

Рассмотрим упругий поиск документов в индексе «заказы / заказы», ​​представляющий различные этапы события

{"order_id": 10001, "order_status": "New",       "time": 20180524101505}
{"order_id": 10002, "order_status": "New",       "time": 20180524101505}
{"order_id": 10001, "order_status": "Paid",      "time": 20180524102505}
{"order_id": 10002, "order_status": "Cancelled", "time": 20180524111505}
{"order_id": 10001, "order_status": "shipped",   "time": 20180525082505}
{"order_id": 10003, "order_status": "New",       "time": 20180525101505}
{"order_id": 10001, "order_status": "Delivered", "time": 20180526082505}
{"order_id": 10001, "order_status": "Closed",    "time": 20180526082605}

Как я могу выполнить поиск, в котором результатом будет последняя стадия этого события,По сути, мне нужно отсортировать по времени и получить индивидуальный результат

{"order_id": 10002, "order_status": "Cancelled", "time": 20180524111505}
{"order_id": 10001, "order_status": "Closed",    "time": 20180526082605}
{"order_id": 10003, "order_status": "New",       "time": 20180525101505}

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Вместо агрегации max я бы предложил использовать top_hits, поскольку вам нужно получить самый последний документ для каждого заказа:

{
  "aggs": {
    "byOrderId": {
      "terms": {
        "field": "order_id"
      },
      "aggs": {
        "latest": {
          "top_hits": {
            "sort": {"time": "desc"},
            "size": 1
          }
        }
      }
    }
  }
}
0 голосов
/ 24 мая 2018

Необходимо выполнить агрегацию с помощью orderId с использованием терминов-агрегации и затем субагрегации с использованием max-агрегации

Вот пример:

{
  "aggs": {
    "byOrderId": {
      "terms": {
        "field": "order_id"
      },
      "aggs": {
        "maxTime": {
          "max": {
            "field": "time"
          }
        }
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...