Рассчитать количество последних снимков записи в ElasticSearch - PullRequest
4 голосов
/ 01 декабря 2019

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

У меня есть что-то подобное

[
  {
    "id": 2,
    "state": "deleted",
    "timestamp": "2019-11-20T18:18:09+00:00"
  },
  {
    "id": 2,
    "state": "published",
    "timestamp": "2019-11-19T18:18:09+00:00"
  },
  {
    "id": 3,
    "state": "published",
    "timestamp": "2019-10-17T18:18:09+00:00"
  },
  {
    "id": 3,
    "state": "draft",
    "timestamp": "2019-10-16T18:18:09+00:00"
  }
]

Iпопробовал это

POST /snapshots/_search
{
  "query": {
    "match_all": {}
  },
  "size": 0,
  "aggs": {
    "2": {
      "terms": {
        "field": "state.keyword",
      },
      "aggs": {
        "1": {
          "top_hits": {
            "size": 1,
              "sort": [
              {
                "timestamp": {
                  "order": "desc"
                }
              }
            ]
          }
        }
      }
    }
  }
}

Но проблема в том, что он сначала создает корзину, и в этой корзине он выполняет сортировку и вычисляет top_hits, поэтому вместо

Удалено = 1

опубликовано = 1

черновик = 0

Возвращено

удалено = 1

опубликовано = 1

осадка = 1

...