我正在尝试计算按用户代理分组的日志数。
这就是我所拥有的。
GET / myindex / _search{ “大小”:30, “stored_fields”:[“req.headers.user-agent.keyword”], “aggs”:{ ” …
您的语法在范围查询中略有错误。它应该是 now-15m/m 代替 now-15m
now-15m/m
now-15m
您可以通过两种方式实现此目的,以实现用户代理的聚合结果。
POST phrase_index/_search { "aggs": { "date_range_filtered_agg": { "filter": { "range": { "timestamp": { "gte": "now-15m/m" } } }, "aggs": { "group_by_userAgent": { "terms": { "field": "req.headers.user-agent.keyword", "size": 10 } } } } }, "size": 30, "stored_fields": ["req.headers.user-agent.keyword"] } POST phrase_index/_search { "query": { "range": { "timestamp": { "gte": "now-15m/m" } } }, "aggs": { "group_by_userAgent": { "terms": { "field": "req.headers.user-agent.keyword", "size": 10 } } }, "size": 30, "stored_fields": ["req.headers.user-agent.keyword"] }
您首先需要过滤器聚合以应用范围查询,然后添加术语子聚合。
看到: https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-filter-aggregation.html
该 range 应该进入查询部分,而不是aggs。时间范围很好
range
我认为你要找的是前30个用户代理存储桶中的文档数量,即产生最多日志的前30个用户代理
GET /myindex/_search { "size": 0, "query": { "range": { "@timestamp": { "gt": "now-15m" } } }, "aggs": { "group_by_userAgent": { "terms": { "field": "req.headers.user-agent.keyword", "size": 30 } } } }