2017-07-25 176 views
0

我有获取从我的弹性DB最新的5000个文件如下聚合弹性搜索

 
{ 
    "size": 5000, 
    "from": 0, 
    "query": { 
     "range" : { 
      "hostTimestamp" : { 
       "gte" : 1499674634382, 
       "lte" : 1499680034000 
      } 
     } 
    }, 
    "sort": [ 
    { 
     "hostTimestamp": { 
     "order": "desc" 
     } 
    } 
    ] 
} 

现在是牵强的文件我的搜索查询作为此查询的结果,我想算没有文件eventSeverity as Alert or Critical。这怎么能实现?

回答

1

可以实现与在eventSeverity领域terms aggregation

{ 
    "size": 5000, 
    "from": 0, 
    "query": { 
     "range" : { 
      "hostTimestamp" : { 
       "gte" : 1499674634382, 
       "lte" : 1499680034000 
      } 
     } 
    }, 
    "sort": [ 
    { 
     "hostTimestamp": { 
     "order": "desc" 
     } 
    } 
    ], 
    "aggs": {     <--- add this part 
    "severities": { 
     "terms": { 
     "field": "eventSeverity" 
     } 
    } 
    } 
} 
+0

感谢您的答复。这给我聚合计数,但它给了我在查询中定义的时间范围内的所有记录聚合。但是,我只需要计算顶级5000个事件的严重性计数,而不是定义范围内的所有事件。有没有办法做到这一点? – user2822012

+0

您可以通过Top Hits聚合获得Top 5000(https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-top-hits-aggregation.html),并在此内你可以使用上面的聚合。 – MartinSchulze

+0

@MartinSchulze你不能在'top_hits'里面定义子聚合。 – Val