ElasticSearch — Возвращает только уникальные значения в запросе

#elasticsearch #curl #elk

Вопрос:

Добрый день.

Я некоторое время боролся с этим, так как я новичок в ElasticSearch, и я был бы очень признателен за некоторые рекомендации или советы.

Моя цель-выполнить запрос, который извлекает список уникальных значений IP-адресов, который фильтруется по времени их последнего появления.

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

Я включил свой запрос ниже, моя цель-ограничить результаты, чтобы не возвращались дубликаты «src_ip» при сортировке по @отметке времени или, по крайней мере, при извлечении последних найденных значений.

 Get _search
{
  "query": {
    "match": {
      "type": "CitrixHoneypot|Ciscoasa"
    }
  },
  "_source": ["@timestamp", "src_ip", "type"],
  "sort": [
    {
      "@timestamp": {
        "order": "desc",
        "unmapped_type": "boolean"
      }
    }
  ],
  "size": 500
}
 

Мы очень ценим любую помощь.

Ответ №1:

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

 {
  "query": {
    "match": {
      "type": "CitrixHoneypot|Ciscoasa"
    }
  },
  "aggs": {
    "unique_ip": {
      "terms": {
        "field": "src_ip",
        "size": 500
      },"aggs": {
        "top_hits": {
          "top_hits": {
            "sort": [{"@timestamp":{ "order": "desc" }}],
            "size": 1
          }
        }
      }
    }
  },"size": 0
}
 

В этом запросе сначала вы находите уникальный src_ips , затем выбираете самый последний документ, используя лучшие хиты, и выполняете сортировку @timestamp .