导航
导航

elasticSearch时间查询问题

后续负责es的维护,测试人员提了一个bug,时间范围查询某一个查询条件会多显示后一天的数据。
当时很纳闷,对于范围查询都是封装es同一套模板实现,不至于只单个出错误。

然后进head查看存入的Type数据,es的日期默认储存的是utc时间

其他时间存入的是年月日时分秒
interest_date 因需求存入的是年月日 后面系统自动补充为 00:00:00
原来如此。

简单说下之前代码逻辑
比如页面上搜索 2018-08-08到2018-08-08这一天的数据
后台接受数据 startTime 2018-08-08 00:00:00 endTime 2018-08-08 00:00:00
实现匹配并做代码处理会在endTime加一天处理

endTime = TimeUtils.addDays(endTime, 1);

最后条件为 08-09 00:00:00

而这种情况对于interest_date则行不通,导致08-09的数据会查询出来
解决方案:特殊处理下

Calendar calendar = Calendar.getInstance();
calendar.setTime(endTime);
calendar.add(Calendar.HOUR_OF_DAY, 23);//时
calendar.add(Calendar.MINUTE, 59);//分
calendar.add(Calendar.SECOND, 59);//秒
boolQueryBuilder.must(ElasticSearchRepository.createDateRangeQuery(start, calendar.getTime(), field));

endTime 数据处理为08-08 23:59:59

后记:解决问题后发现跟es自身没啥太大关系,哈哈尴尬。还好是解决了封装的es操作方法的一个隐藏bug