Elasearch时间查询及分组统计
发表于:2025-11-06 作者:千家信息网编辑
千家信息网最后更新 2025年11月06日,/** * 从ES中查询数据 * ES的时间如果不设置的话,默认是UTC时间,与北京时间相差8个小时,在查询统计的时候,如果不做统计的话,数据肯定是不准确的。 * ES版本:6.4.1。使用的jav
千家信息网最后更新 2025年11月06日Elasearch时间查询及分组统计
/** * 从ES中查询数据 * ES的时间如果不设置的话,默认是UTC时间,与北京时间相差8个小时,在查询统计的时候,如果不做统计的话,数据肯定是不准确的。 * ES版本:6.4.1。使用的javaApi是 Elasearch High Level Rest Client6.4 * @param monthDate (patten:yyyy-MM) * @return List统计结果。 */public List queryOrderCountDataFromEs(String monthDate) { try { /** * 条件查询(时间范围) */ String startTime = DateUtil.getMonthFirstDay(DateUtil.dateStr2Date(monthDate + "-01", DateUtil.PATTERN_DTSHORTLINE)); String endTime = DateUtil.getMonthLastDay(DateUtil.dateStr2Date(monthDate + "-01", DateUtil.PATTERN_DTSHORTLINE)); Date s = DateUtil.dateStr2Date(startTime + " 00:00:00", DateUtil.PATTERN_SIMPLE); Date e = DateUtil.dateStr2Date(endTime + " 23:59:59", DateUtil.PATTERN_SIMPLE); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); BoolQueryBuilder boolQuery = QueryBuilders.boolQuery(); boolQuery.must(QueryBuilders.rangeQuery("order_time").gte(s).lte(e)); searchSourceBuilder.query(boolQuery); /** * 分组聚合 */ TermsAggregationBuilder aggregationBuilder = AggregationBuilders.terms("orderStatusCount").field("order_status"); aggregationBuilder.size(ESConstants.ES_AGG_SIZE); aggregationBuilder.collectMode(Aggregator.SubAggCollectionMode.BREADTH_FIRST); DateHistogramAggregationBuilder field = AggregationBuilders.dateHistogram("orderTime").field("order_time"); /* *时间统计的时候,注意时差问题。统计的时候,设置时区即可,不需要设置偏移量。 *offset偏移量这个参数,在某些时刻也是有用的,它可以自己定义一天的开始,比如设置从第一天的3点到第二天的3点为一天,默认都是从0点开始0点结束算做一天的 */ field.dateHistogramInterval(DateHistogramInterval.DAY).timeZone(DateTimeZone.getDefault());//.offset("+8h"); aggregationBuilder.subAggregation(field); searchSourceBuilder.aggregation(aggregationBuilder); SearchResponse response = client.searchDocument(ESConstants.ES_EC_ORDER_INDEX, ESConstants.ES_EC_ORDER_TYPE, searchSourceBuilder); //结果处理 Terms byPath = response.getAggregations().get("orderStatusCount"); List extends Terms.Bucket> buckets = byPath.getBuckets(); List resultVos = new ArrayList<>(); for (Terms.Bucket bucket : buckets) { Histogram agg = bucket.getAggregations().get("orderTime"); for (Histogram.Bucket entry : agg.getBuckets()) { SysCountResultVo sysCountVo = new SysCountResultVo(); sysCountVo.setLocalPath(bucket.getKeyAsString()); long t = ((DateTime)entry.getKey()).getMillis(); Calendar cal = Calendar.getInstance(); cal.setTimeInMillis(t); sysCountVo.setDimension(DateUtil.date2DateStr(cal.getTime(),DateUtil.PATTERN_SIMPLE)); sysCountVo.setTimes(entry.getDocCount()); resultVos.add(sysCountVo); } } return resultVos; } catch (Exception e) { logger.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>从ES中查询数据失败"); e.printStackTrace(); return null; }}
时间
统计
查询
数据
时候
结果
偏移
分组
参数
小时
时刻
时区
时差
有用
条件
点到
版本
范围
问题
北京
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发图标下载
服务器一插网线就卡了
软件开发技术学院风套装
网络安全整改报告图书馆
嵌入式软件开发 绩效
华西医院软件开发
xp用什么样的软件开发
珑京GPU服务器怎么样
安徽软件开发技校
2018年国家网络安全宣传周主题
网易服务器能买吗
阿里云服务器安装SQL
浙江前程网络技术有限公司
周鸿祎提升网络安全
战地五刺刀服务器
数据库应用技术教程沈越
合肥市网络安全委员会
eve 服务器
温州常用网络技术创新服务
卡巴斯基网络安全
网络安全与保密区别
安徽项目软件开发服务费
互联网科技公司总部投资
网络安全考研院校有哪些
瀑布式软件开发方法论
网络安全漏洞与防御措施
管理系统的数据库需要哪些特点
总感觉自己学不会数据库
速达软件登陆提示数据库
软件开发团队 管理