ES分组聚合取数据top前十条 朴灿烈づ我的快乐病毒、 2022-12-09 03:10 506阅读 0赞 public Response getTopUrl(CrashLogListReq req) { SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); QueryBuilder queryAll = QueryBuilders.matchAllQuery(); RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("timestamp").gte(req.getStartTime()).lte(req.getEndTime()).format("epoch_millis"); BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery().must(queryAll).must(rangeQueryBuilder); searchSourceBuilder.query(boolQueryBuilder); searchSourceBuilder.sort("timestamp", SortOrder.DESC); searchSourceBuilder.size(10); TermsAggregationBuilder termsBuilder = AggregationBuilders.terms("request.url").field("request.url"); searchSourceBuilder.aggregation(termsBuilder); //执行查询 searchSourceBuilder.sort("request.responseTime", SortOrder.DESC); SearchRequest searchRequest = new SearchRequest( "app_api_request_log", "app_api_request_log").source(searchSourceBuilder); SearchResponse response = null; try { response = restHighLevelClient.search(searchRequest); } catch (Exception e) { e.printStackTrace(); log.error("平均响应时间最慢Top10列表-------------查询es发生异常,入参:{}, Exception:{}", e.getStackTrace().toString()); throw new VspBusinessException(ErrorCodeEnum.ERR_ES_SEARCH.getCode(), ErrorCodeEnum.ERR_ES_SEARCH.getMsg()); } List<String> listDumpliate = new ArrayList<String>(); List<FordControlListRequestVo> list = new ArrayList<FordControlListRequestVo>(); Terms terms = response.getAggregations().get("request.url"); for (int i = 0; i < terms.getBuckets().size(); i++) { String url = terms.getBuckets().get(i).getKey().toString(); FordControlListRequestVo fordControlListVo = new FordControlListRequestVo(); fordControlListVo.setName("url"); fordControlListVo.setCount(terms.getBuckets().get(i).getDocCount()); fordControlListVo.setValue(url); if (!listDumpliate.contains(url)) { list.add(fordControlListVo); listDumpliate.add(fordControlListVo.getValue()); } } JSONObject returnObj = new JSONObject(); returnObj.put("dataList", JSON.toJSONString(list)); return ResponseHelper.createSuccessResponse(returnObj); }
还没有评论,来说两句吧...