日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

ElasticSearch Java SpringBoot根据时间范围分组求和

發(fā)布時間:2025/3/15 java 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ElasticSearch Java SpringBoot根据时间范围分组求和 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

需求是這樣的:
近7天的用戶登陸統(tǒng)計,根據日期來返回的要是data:[{date:“2021-04-01”,count:“1”}]

@Autowired private ElasticsearchTemplate elasticsearchTemplate;SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd"); //這個是獲取7天前的時間,比如說今天是4月29,7天前就是4月23, //因為要包括今天,輸出為"2021-04-23" String startTime = DateUtil.getWeekFromNow(); //這個是輸出今天的時間,格式為"2021-04-29" String endTime = formater.format(new Date()); List<LoginLogDoc> loginLogDocList = new ArrayList<>(); List<EchartsVO> echartsVOS = new ArrayList<>(); BoolQueryBuilder bqb = QueryBuilders.boolQuery(); bqb.must(QueryBuilders.rangeQuery("createTime").from(startTime).to(endTime)); SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(bqb).withIndices("login_log").withTypes("login_log").withSearchType(SearchType.DEFAULT).build(); loginLogDocList= elasticsearchTemplate.queryForList(searchQuery,LoginLogDoc.class); //因為我的createTime 是String型的,而且他的格式為"2021-04-29 12:00:00" //循環(huán)list,把時間格式統(tǒng)一成yyyy-MM-dd for (LoginLogDoc loginLogDoc : loginLogDocList) {loginLogDoc.setCreateTime(loginLogDoc.getCreateTime().substring(0,10));} //loginLogDocList其實不是我想要返回的,因為我們主要是想返回 時間和count,現(xiàn)在查出來的是一條條的記錄,我們要根據這些記錄分組 //再把list根據時間createTime來分組統(tǒng)計,然后存入map Map resultMap = new HashMap(); for (LoginLogDoc loginLogDoc : loginLogDocList) {loginLogDoc.setCreateTime(loginLogDoc.getCreateTime());Object obj = resultMap.get(loginLogDoc.getCreateTime());if(obj != null){resultMap.put(loginLogDoc.getCreateTime(), ((Integer) obj + 1));}else{resultMap.put(loginLogDoc.getCreateTime(), 1);} } //再將map轉換成我們需要的list。echartsVOS resultMap.forEach((key, value) -> {EchartsVO echartsVO = new EchartsVO();echartsVO.setDate((String) key);echartsVO.setCount((Integer) value);echartsVOS.add(echartsVO); }); //最好這個echartsVOS就是我們要的

login_log 是我們的實體類的名稱:

@Getter @Setter @ToString @Document(indexName = "login_log", type = "login_log", createIndex = false) public class LoginLogDoc implements Serializable {/*** 記錄id*/@Idprivate String loginLogId;/*** 用戶id*/private Integer userId;/*** 登陸時間*/private String createTime; }

有什么問題就給我留言吧

總結

以上是生活随笔為你收集整理的ElasticSearch Java SpringBoot根据时间范围分组求和的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。