iamazy / elasticsearch-sql

parse sql into elasticsearch dsl with antlr4
https://iamazy.github.io/elasticsearch-sql/
MIT License
339 stars 89 forks source link

字段值parse全都是string #4

Closed mahuxiaozi closed 5 years ago

mahuxiaozi commented 5 years ago

,<, between and 解析为string类型,会导致查询没有结果,这个需要优化

iamazy commented 5 years ago

,<, between and 解析为string类型,会导致查询没有结果,这个需要优化

可以给一个sql例子吗

mahuxiaozi commented 5 years ago

String sql = "select * from kaoqin where ALARMTIMELONG between 1425347697000 and 1425353754000 and xingming='小红' and age=13 limit 10";

解析后:

{ "from" : 0, "size" : 10, "query" : { "bool" : { "must" : [ { "range" : { "ALARMTIMELONG" : { "from" : "1425347697000", "to" : "1425353754000", "include_lower" : true, "include_upper" : true, "boost" : 1.0 } } }, { "term" : { "xingming" : { "value" : "小红", "boost" : 1.0 } } }, { "term" : { "age" : { "value" : "13", "boost" : 1.0 } } } ], "adjust_pure_negative" : true, "minimum_should_match" : "1", "boost" : 1.0 } }, "_source" : { "includes" : [ ], "excludes" : [ ] } }

时间字段和年龄都是“”引号括起来的,不是整型了,es中字段是整型的话查不出结果

iamazy commented 5 years ago

String sql = "select * from kaoqin where ALARMTIMELONG between 1425347697000 and 1425353754000 and xingming='小红' and age=13 limit 10";

解析后:

{ "from" : 0, "size" : 10, "query" : { "bool" : { "must" : [ { "range" : { "ALARMTIMELONG" : { "from" : "1425347697000", "to" : "1425353754000", "include_lower" : true, "include_upper" : true, "boost" : 1.0 } } }, { "term" : { "xingming" : { "value" : "小红", "boost" : 1.0 } } }, { "term" : { "age" : { "value" : "13", "boost" : 1.0 } } } ], "adjust_pure_negative" : true, "minimum_should_match" : "1", "boost" : 1.0 } }, "_source" : { "includes" : [ ], "excludes" : [ ] } }

时间字段和年龄都是“”引号括起来的,不是整型了,es中字段是整型的话查不出结果

我还以为你说的是另一个问题呢,这个好像可以欸,我自己在es中直接用dsl查了一下,数字或者boolean类型的true和false写成字符串也是可以查的

mahuxiaozi commented 5 years ago

又测了一下,发现是 "minimum_should_match" : "1",这个参数引起的,查询没有结果。在这个查询中没有or条件,不会有should查询,加上了这个参数不会返回结果,这个是不是个问题?

iamazy commented 5 years ago

又测了一下,发现是 "minimum_should_match" : "1",这个参数引起的,查询没有结果。在这个查询中没有or条件,不会有should查询,加上了这个参数不会返回结果,这个是不是个问题?

应该是,我改一下

iamazy commented 5 years ago

又测了一下,发现是 "minimum_should_match" : "1",这个参数引起的,查询没有结果。在这个查询中没有or条件,不会有should查询,加上了这个参数不会返回结果,这个是不是个问题?

你是什么版本的es,我重新编译一下插件

iamazy commented 5 years ago

7.2.0以上的插件都已更新,感谢啦!!!

mahuxiaozi commented 5 years ago

OK