//存放时间及统计数据
Map<Object, Long> tempMap = this.getTimeMap();
String esIndex = "log_app_2021-12-16";
//构造检索条件
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
//测试代码 我将数据写死了
searchSourceBuilder.query(QueryBuilders.queryStringQuery("console").field("name"));
DateHistogramAggregationBuilder dateHistogramAggregationBuilder = AggregationBuilders.dateHistogram("aggs").field("checkTime").dateHistogramInterval(DateHistogramInterval.hours(1));
searchSourceBuilder.aggregation(dateHistogramAggregationBuilder);
Search sb = new Search.Builder(searchSourceBuilder.toString()).addIndex(esIndex).build();
try {
SearchResult result = jestClient.execute(sb);
if (result != null && result.isSucceeded()) {
TermsAggregation aggregation = result.getAggregations().getAggregation("aggs", TermsAggregation.class);
if (aggregation != null && aggregation.getBuckets() != null) {
aggregation.getBuckets().forEach(entry -> {
//我用的是自己的时间进行计算的所以时区要修改一下
long temp = 8*60*60*1000;
String timestamp = (Long.parseLong(entry.getKey())-temp)+"";
String key = DateUtils.getYearMonthDay(new Date(Long.parseLong(timestamp)), "HH:mm");
tempMap.put(key, entry.getCount());
});
}
}
}catch (Exception ex){
ex.printStackTrace();
}
public static String getYearMonthDay(Date date,String formatPatten){
try {
formatPatten = org.springframework.util.StringUtils.isEmpty(formatPatten)? YYYY_MM_DD : formatPatten;
return new SimpleDateFormat(formatPatten).format(date);
}catch (Exception e){
e.printStackTrace();
return null;
}
}
private Map<Object,Long> getTimeMap(){
Map<Object,Long> map = new LinkedHashMap<>();
LocalDateTime of = LocalDateTime.of(LocalDate.now(), LocalTime.MIN);
long l = of.toInstant(ZoneOffset.of("+8")).toEpochMilli();
while(l<=System.currentTimeMillis()){
map.put(DateUtils.getYearMonthDay(new Date(l), "HH:mm"),0L);
l+=60*60*1000;
}
return map;
}