Elasticsearch查询问题:fliter 多条件查询。

问题未解决!!!

 

我今天想做一个查询,用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的多条件查询应该怎么做啊——有大佬指点一下吗~~

跪谢。

 

posted @ 2019-08-26 16:35  佐助家的兰兰  阅读(1634)  评论(0)    收藏  举报