Elasticsearch

ES查询一段时间内某一循环时间段的数据

2018-06-02  本文已影响10人  达微

业务需求:查询几个月类每天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);

    }

上一篇下一篇

猜你喜欢

热点阅读