问题未解决!!!
我今天想做一个查询,用sql来写的话差不多是这样的
SELECT id,name FROM table WHERE name IS NOT NULL
写成Query DSL就是这样的:
GET /_search { "_source": ["id","name"], "query": { "bool": { "filter": { "exists": { "field": "name" } } } } }
然后查询出来之后发现name中有类似这样的东西:
"name": ""
也就是说我的数据中有不为null的空字符串。因此我想加一个过滤器,就是说把sql语句改成这样:
SELECT id,name FROM zhong WHERE name IS NOT NULL AND name!=""
然后我发现它无法简单的改写成Query DSL。因为filter只支持一个条件。filter里面不能用list格式也就是[ ]这个来输入变量组。
但是must可以。
orz
所以加条件的查询可以直接用must来代替fliter增加search条件了。
最后我的解决方案是把sql语句改成了下面这个,来让flter条件变成一个:
SELECT id,name FROM zhong WHERE name!=""
因为这个其实就包含了 name is not null的条件在里面了orz
我好蠢。
不过这么解决总感觉是投机取巧,因为我没有真的使用fliter来做多条件查询。
那么用flter的多条件查询应该怎么做啊——有大佬指点一下吗~~
跪谢。