Java客户端根据时间范围查询es中的数据

需求:根据时间范围,查询es中的数据

说明:在使用logstash将关系型数据库中的数据抽到es中时,需要转为时间搓格式保存,这样就可以根据时间搓进行时间范围查询了

注意:如果不对时间字段做处理,默认的保存格式不方便进行时间范围查询

默认保存到es中的时间格式:
这种格式不方便我们的客户端进行时间范围查询
在这里插入图片描述

logstash抽取mysql中的数据时,对于datetime类型的字段,可以使用unix_timestamp()函数:
示例:unix_timestamp(a.create_time) create_time

查看es中保存的时间搓数据:
在这里插入图片描述
java客户端查询关键代码:

将字符串时间yyyy-MM-dd HH:mm:ss转为es查询的时间搓格式

/**
     * 获取时间搓
     *
     * @param source
     * @param pattern
     * @return
     */
    public static long getTimestamp(String source, String pattern) {
        try {
            pattern = (pattern == null) ? DATE_TIME : pattern;
            SimpleDateFormat dateFormat = new SimpleDateFormat(pattern);
            long time = dateFormat.parse(source).getTime();
            return time;
        } catch (ParseException e) {
            LOGGER.error("时间解析失败", e);
        }
        throw new BusinessException("时间解析失败");
    }

    public static String getEsStringTimestamp(String source, String pattern) {
        if (StringUtils.isBlank(source)) {
            return null;
        }
        long timestamp = getTimestamp(source, pattern);
        String esTimestamp = String.valueOf(timestamp);
        return esTimestamp.substring(0, esTimestamp.length() - 3);
    }

es客户端查询关键代码:
默认是 <= 和>=

  // 根据时间范围查询
        RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("gmt_create");
        rangeQueryBuilder.from("1575946364");
        rangeQueryBuilder.to("1575979688");
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值