es搜索bool和range的联合使用

当需要根据某个完全匹配字段和某个范围条件对es存储数据进行过滤了,我拼接了一个json串,运行时一直显示错误:

{"size":1000,"sort":{"create_time":{"order":"desc"}},"query":{"bool" : {
            "must" : {
                "term" : {
                    "test_id":10102
                }
            }},"range":{"create_time":{"gte":"2018-12-01 00:25:46","lte":"2019-01-09 00:25:46","format":"yyyy-MM-dd HH:mm:ss"},"":{}}}}

运行时错误如下:

后来将json串改为:

 

"size":1000,"sort":{"create_time":{"order":"desc"}},"query":{"bool" : {
            "must" : {
                "term" : {
                    "test_id":"10202"
                }
            },"filter":{"range":{"create_time":{"gte":"2018-12-01 00:25:46","lte":"2019-01-09 00:25:46","format":"yyyy-MM-dd HH:mm:ss"}}}}}}

这样就获取数据正常了。

而单独使用一下语句均正常

{"size":1000,"sort":{"create_time":{"order":"desc"}},"query":{"range":{"create_time":{"gte":"2018-12-01 00:25:46","lte":"2019-01-09 00:25:46","format":"yyyy-MM-dd HH:mm:ss"},"":{}}}}

{"size":1000,"sort":{"create_time":{"order":"desc"}},"query":{"bool" : {
            "must" : {
                "term" : {
                    "test_id":10102
                }
            }}}}

 

错误分析:

查询类似与在正确匹配的情况下,再按照时间段来进行过滤,此时需要将range放入bool的filter中进行再次过滤操作,这样就可以运行。

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值