当需要根据某个完全匹配字段和某个范围条件对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中进行再次过滤操作,这样就可以运行。