es 分组根据分钟和天统计数量
1.遇见的问题
- 使用间隔天数去分割的时候,时间多8小时
2.解决方案
aggregationBuilder = AggregationBuilders.dateHistogram("dateHistogram").dateHistogramInterval(DateHistogramInterval.days(1)).minDocCount(0).field("cjTimestamp").format("").extendedBounds(new ExtendedBounds(start, end)).offset("-8h");
3.完整代码
HashMap<String, Object> map = new HashMap<>(1);CommonExceptionEnum.NOT_NULL.assertNotEmpty(request);CommonExceptionEnum.NOT_NULL.assertNotEmpty(request.getPlatform());CommonExceptionEnum.NOT_NULL.assertNotEmpty(request.getType());if ("2".equals(request.getPlatform())) {Long deptId = SecurityUtils.getDeptId();if (ObjectUtil.isEmpty(deptId)) {return RequestResult.success(map);}request.setDeptId(deptId.intValue());}Long start = System.currentTimeMillis();SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DateUtils.YYYY_MM_DD);if (request.getType().equals(1)) {simpleDateFormat = new SimpleDateFormat(DateUtils.YYYY_MM_DD_HH_MM_SS);start = Date.from(LocalDate.now().atStartOfDay(ZoneId.systemDefault()).toInstant()).getTime();}if (request.getType().equals(2)) {start = getTimesWeekmorning().getTime();}if (request.getType().equals(3)) {start = getTimesMonthmorning().getTime();}String substring = start.toString().substring(0,start.toString().length() - 5);start = (Long.parseLong(substring) * 100000L);SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();long end = System.currentTimeMillis();boolQueryBuilder.must(QueryBuilders.rangeQuery("cjTimestamp").gte(start).lte(end));if (ObjectUtil.isNotEmpty(request.getDeptId())) {boolQueryBuilder.must(QueryBuilders.termQuery("devicesInfo.deptId", request.getDeptId()));}AggregationBuilder aggregationBuilder = null;if (!request.getType().equals(1)) {aggregationBuilder = AggregationBuilders.dateHistogram("dateHistogram").dateHistogramInterval(getDateHistogramInterval(request.getType())).minDocCount(0).field("cjTimestamp").format("").extendedBounds(new ExtendedBounds(start, end)).offset("-8h");} else {aggregationBuilder = AggregationBuilders.dateHistogram("dateHistogram").dateHistogramInterval(getDateHistogramInterval(request.getType())).minDocCount(0).field("cjTimestamp").format("").extendedBounds(new ExtendedBounds(start, end));}searchSourceBuilder.query(boolQueryBuilder).aggregation(aggregationBuilder).size(0);SearchRequest searchRequest = new SearchRequest();searchRequest.source(searchSourceBuilder);searchRequest.indices("standard_device_data");SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);Aggregation agg = searchResponse.getAggregations().get("dateHistogram");List<? extends Histogram.Bucket> buckets = ((Histogram) agg).getBuckets();List<CollectDataResponse> list = new ArrayList<>();for (Histogram.Bucket bucket : buckets) {CollectDataResponse collectDataResponse = new CollectDataResponse();long time = Long.parseLong(bucket.getKeyAsString().replace(",", ""));if (time >= start) {String dateString = simpleDateFormat.format(time);collectDataResponse.setDate(dateString);collectDataResponse.setNum(bucket.getDocCount());list.add(collectDataResponse);}}map.put("allNum", list);private DateHistogramInterval getDateHistogramInterval(Integer dateType) {if (dateType.equals(1)) {return DateHistogramInterval.minutes(15);}if (dateType.equals(2)) {return DateHistogramInterval.days(1);}if (dateType.equals(3)) {return DateHistogramInterval.days(1);}return DateHistogramInterval.days(1);}public static Date getTimesWeekmorning() {Calendar cal = Calendar.getInstance();cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONDAY), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);return cal.getTime();}public static Date getTimesMonthmorning() {Calendar cal = Calendar.getInstance();cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONDAY), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);cal.set(Calendar.DAY_OF_MONTH, cal.getActualMinimum(Calendar.DAY_OF_MONTH));return cal.getTime();}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!