Как получить самые свежие данные из Elasticsearch на основе поля даты

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

Примечание. У меня нет идентификатора или уникального поля, которое могло бы помочь мне сгруппировать по нему и установить размер 1, чтобы получить последнюю информацию.

Можете ли вы дать другие варианты?


person C.Mahfoud    schedule 14.10.2020    source источник


Ответы (1)


Вы можете агрегировать по последней доступной метке времени и получить лучшие, потенциально повторяющиеся документы, например:

GET index/_search
{
  "size": 0,
  "aggs": {
    "latest": {
      "terms": {
        "field": "timestamp",
        "order": {
          "_key": "desc"
        },
        "size": 1
      },
      "aggs": {
        "latest_docs": {
          "top_hits": {
            "size": 100
          }
        }
      }
    }
  }
}
person Joe Sorocin    schedule 14.10.2020
comment
Да, действительно, но команда Infra ограничила меня, чтобы не помещать более 100 в размер top_hits, и мне нужно получить гораздо больше строк. - person C.Mahfoud; 15.10.2020
comment
Хм, ты не сказал, что у тебя есть предел. Если вы хотите получить get all events, вам нужно попросить своих коллег по инфраструктуре разрешить вам увеличить его. - person Joe Sorocin; 15.10.2020