ElasticSearch - 仅返回查询中的唯一值

时间:2021-07-17 06:19:31

标签: elasticsearch curl elk

G'day。

因为我是 ElasticSearch 的新手,我一直在为这个问题苦苦挣扎,我真的很感激一些指导或建议。

我的目标是执行检索唯一 IP 值列表的查询,该列表按它们上次出现的时间进行过滤。

我正在苦苦挣扎的是独特的部分。我已经对“aggs”进行了一些试验,它可以用来获得唯一值,但我无法找到一种方法来仍然按照它们上次出现的时间对结果进行排序。

我在下面包含了我的查询,我的目标是限制结果,以便在仍然按 @timestamp 排序或至少检索最后找到的值的同时不会返回“src_ip”的重复项。

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

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

您请求的查询如下所示:

{
  "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 排序。

相关问题