业务需求:查询几个月类每天8点到10点的数据
最开始基于date类型,用painless脚本实现,用profile跟了下效率感觉不是很好,就冗余了个字段做range过滤,也一般,lucence了解的不是很深入,不知道有没有基于时间戳更好的实现,单独列出来备注下,后期看看是否有更好的实现
static public StringscriptQueryByTime(String startTime, String endTime ){
if(StringUtils.isBlank(startTime)||StringUtils.isBlank(endTime)){
return null;
}
int start = Integer.valueOf(startTime.replace(":",""));
int end = Integer.valueOf(endTime.replace(":",""));
String source ="int hour = doc['pass_time'].date.hourOfDay;int minute = doc['pass_time'].date.minuteOfHour;int flag=hour*100+minute; flag>="+start+"&&flag <="+end+" ";
return "{\"script\":{\"script\":\""+source+"\"}}";
}
static public StringscriptQueryByTime2(String startTime, String endTime ){
if(StringUtils.isBlank(startTime)||StringUtils.isBlank(endTime)){
return null;
}
if(startTime.length()==4){
startTime=startTime+"00";
}
if(endTime.length()==4){
endTime=endTime+"00";
}
int start = Integer.valueOf(startTime.replace(":",""));
int end = Integer.valueOf(endTime.replace(":",""));
return rangeGteAndLte("timenum",start,end);
}
网友评论