Java Elasticsearch 按一定时间间隔(timeInterval)循环查询数据

最近有个需求,前端传入时间间隔,去elasticsearch按照时间间隔统计每个时间间隔内数据量。

public List<HashMap<String,Object>> getCount(@RequestParam Integer time, @RequestParam String selectedDatedTime) {SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");format.setTimeZone(TimeZone.getTimeZone(ZoneId.of(DateUtil.TIMEZONE_ZONE_ID)));Date date = CommonUtil.getDateByString(selectedDatedTime);Calendar fromDate = Calendar.getInstance();fromDate.setTime(date);fromDate.add(Calendar.HOUR_OF_DAY, -time);Calendar toDate = Calendar.getInstance();toDate.setTime(date);RangeQueryBuilder timeRangeQuery = QueryBuilders.rangeQuery(ApplicationConstant.TIMESTAMP)// .timeZone("Asia/Singapore").gte(fromDate.getTimeInMillis()).lt(toDate.getTimeInMillis());String application = "";if (applications != null && applications.size() > 0){application = applications.get(0);}IndexCoordinates index = IndexCoordinates.of("xxxxxxx");DateHistogramInterval timeInterval = null;if(time==1){timeInterval= DateHistogramInterval.minutes(5);}else if(time==24 || time==6 ||time==12){timeInterval = DateHistogramInterval.hours(1);}else{timeInterval= DateHistogramInterval.hours(12);}Query sq = new NativeSearchQueryBuilder().withQuery(timeRangeQuery).addAggregation(AggregationBuilders.dateHistogram("date_histogram").field(TIMESTAMP_FIELD_NAME).fixedInterval(timeInterval).minDocCount(0).timeZone(ZoneId.of(DateUtil.TIMEZONE_ZONE_ID)).extendedBounds(new ExtendedBounds(fromDate.getTimeInMillis(), toDate.getTimeInMillis()))).withPageable(Pageable.unpaged()).build();return esservice.getCountApi(sq, index);}

这里面的 timeInterval 就是设定间隔时间。

加入 extendedBounds 目的就是防止出现0数据不会返回,例如我只有8am到12am内有数据,现在是12am,timeInterval是一小时,总共时间跨度是12小时。如果不设置extendedBounds的话,date_histogram查询出来的聚合只会有8am-9am,9am-10am,10am-11am,11am-12am这几个的聚合,不会有8am之前的聚合出现,照理来说,会出现12个聚合,不管有没有数据都有聚合返回,只不过某些聚合出来docCount是0而已。所以需要加上这个条件
因为前端ui需要进行展示,就算没有数据也需要展示。例如这个chart的前半段,虽然聚合出来没有数据,但是也需要展示0数据。

 

 

这边是处理数据的service

public List<HashMap<String, Object>> getCountApi(Query sq, IndexCoordinates esindex) {HashMap<String, Object> data = new HashMap<>();List<HashMap<String, Object>> list = new ArrayList<>();SearchHits<HashMap> result = template.search(sq, HashMap.class, esindex);Aggregations agg = result.getAggregations();if (agg != null) {ParsedDateHistogram histogram = agg.get("date_histogram");List<HashMap<String, Object>> innerlist = new ArrayList<>();for (Histogram.Bucket timebucket : histogram.getBuckets()) {HashMap<String, Object> tempMap = new HashMap<>();ZonedDateTime zdt = (ZonedDateTime) timebucket.getKey();DateTime dt = new DateTime(zdt.toEpochSecond() * 1000L, DateTimeZone.forID(DateUtil.TIMEZONE_ZONE_ID));// String dateStr = dt.toString("yyyy-MM-dd HH:mm:ss");tempMap.put("x", dt.getMillis());tempMap.put("y", timebucket.getDocCount());innerlist.add(tempMap);}data.put("data", innerlist);data.put("name", NAME_OF_TYPE);list.add(data);}return list;}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/174570.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Microsoft365(原office365)个人版与家庭版有什么不同

数据表明PowerPoint软件提供多种动态和静态过渡效果和文字计划模板&#xff0c;可让演示文稿更加统一和美观。从总体上来看Office软件支持多种操作方式&#xff0c;包括鼠标和键盘快捷键等。不得不说Excel软件支持多种数据验证和错误处理功能&#xff0c;可让使用者处理数据更加…

53基于matlab的Tamura纹理特征提取

基于matlab的Tamura纹理特征提取&#xff0c;包括粗糙度、对比度、方向度、线性度、规则度、粗糙度六种&#xff0c;可替换自己的数据进行特征提取。程序已调通&#xff0c;可直接运行。 53 方向度、线性度、规则度 (xiaohongshu.com)

动态规划学习——多状态dp(打家劫舍问题)

一&#xff0c;打家劫舍I 题目&#xff1a; 一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响小偷偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自…

RocketMQ(一):基本概念和环境搭建

Spring源码系列文章 RocketMQ(一)&#xff1a;基本概念和环境搭建 目录 一、RocketMQ简介二、各个MQ产品的比较三、RocketMQ重要概念1、基本概念2、消息从发送到被消费的的流程3、生产和消费理解 四、RocketMQ安装1、下载RocketMQ2、解压并配置环境变量3、修改nameServer的运行…

wordcloud出现ValueError: Only supported for TrueType fonts

方法1&#xff1a;换一个版本的wordcloud即可&#xff0c;实测windows在1.8.2.2版本上不会报错。 方法2&#xff1a;还可以尝试其他博客中的解决方案&#xff0c;自己下个字体的TTF文件&#xff0c;让后font_path直接写字体文件路径。&#xff08;此方法未见效&#xff09;

【Python 算法】双向迪杰斯特拉算法 Python实现

双向迪杰斯特拉算法Python实现 文章目录 双向迪杰斯特拉算法Python实现简介双向迪杰斯特拉算法优势局限性算法的基本步骤终止条件 基本步骤伪代码Python 实现双向迪杰斯特拉与单向迪杰斯特拉算法比较 简介 双向迪杰斯特拉算法&#xff08;Bi Directional Dijkstra Algorithm&a…

解析SQL 获取表、字段及SQL查询参数

解析SQL 获取表、字段及SQL查询参数 1. 执行效果2. 使用2.1 引入依赖2.2 相关实体2.3 工具类 1. 执行效果 2. 使用 2.1 引入依赖 <!-- sql 解析处理--><dependency><groupId>com.github.jsqlparser</groupId><artifactId>jsqlparser</artifa…

【读点论文】结构化剪枝

结构化剪枝 在一个神经网络模型中&#xff0c;通常包含卷积层、汇合层、全连接层、非线形层等基本结构&#xff0c;通过这些基本结构的堆叠&#xff0c;最终形成我们所常用的深度神经网络。 早在 1998 年&#xff0c;LeCun 等人使用少数几个基本结构组成 5 层的 LeNet-5 网络&…

docker简介和安装

0.前提 本文章意在告诉各位开发者学生有一个工具能够方便你未来的项目开发和部署&#xff0c;这也是我在给我留下一份备份&#xff0c;在我忘记的时候可以回头寻找。 1.docker简介 docker本身就有集装箱的意思。Docker: Accelerated Container Application Development Dock…

香港科技大学广州|智能制造学域机器人与自主系统学域博士招生宣讲会—中国科学技术大学专场

&#x1f3e0;地点&#xff1a;中国科学技术大学西区学生活动中心&#xff08;一楼&#xff09;报告厅 【宣讲会专场1】让制造更高效、更智能、更可持续—智能制造学域 &#x1f559;时间&#xff1a;2023年11月16日&#xff08;星期四&#xff09;18:00 报名链接&#xff1a…

算法通关村第十六关青铜挑战——原来滑动窗口如此简单!

大家好&#xff0c;我是怒码少年小码。 从本篇开始&#xff0c;我们就要开始算法的新篇章了——四大思想&#xff1a;滑动窗口、贪心、回溯、动态规划。现在&#xff0c;向我们迎面走来的是——滑动窗口思想&#xff01;&#x1f61d; 滑动窗口思想 概念 在数组双指针里&am…

Java Stream 的使用

Java Stream 的使用 开始中间操作forEach 遍历map 映射flatMap 平铺filter 过滤limit 限制sorted 排序distinct 去重 结束操作collect 收集toList、toSet 和 toMapCollectors.groupingByCollectors.collectingAndThen metch 匹配find 查询findFirst 与 findAny 的使用Optional …