ElasticSearch - Return 查询中只有唯一值

ElasticSearch - Return only unique values in query

你好。

我已经为这个问题苦苦挣扎了一段时间,因为我是 ElasticSearch 的新手,非常感谢一些指导或建议。

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

我正在努力解决的是 unique 部分。我已经对“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
}

非常感谢任何帮助。

您请求的查询如下所示:

{
  "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,然后您 select 使用热门匹配的最新文档并排序 @timestamp