ElastichSearchelasticsearch玩转大数据

四、基于bool来组合多个filter条件搜索数据

2017-07-14  本文已影响148人  编程界的小学生

1、搜索发帖日期为2017-01-01,或者帖子ID为XHDK-A-1293-#fJ3的帖子,同时要求帖子的发帖日期绝对不为2017-01-02的document

SQL :

select *
from forum.article
where (post_date='2017-01-01' or article_id='XHDK-A-1293-#fJ3')
and post_date!='2017-01-02'

ES:

GET /forum/article/_search
{
  "query": {
    "constant_score": {
      "filter": {
        "bool": {
          "should" : [
            {"term" : {"postDate" : "2017-01-01"}},
            {"term" : {"articleID.keyword" : "XHDK-A-1293-#fJ3"}}
          ],
          "must_not" : {
            "term" : {"postDate" : "2017-01-02"}
          }
        }
      }
    }
  }
}

2、搜索帖子ID为XHDK-A-1293-#fJ3,或者帖子ID为JODL-X-1937-#pV7而且发帖日期为2017-01-01的帖子

SQL:

select *
from forum.article
where article_id='XHDK-A-1293-#fJ3'
or (article_id='JODL-X-1937-#pV7' and post_date='2017-01-01')

ES:

GET /forum/article/_search
{
  "query": {
    "constant_score": {
      "filter": {
        "bool": {
          "should" : [
            {
              "term" : {"articleID.keyword" : "XHDK-A-1293-#fJ3"}
            },
            {
              "bool" : {
                "must" : [
                  {"term" : {"articleID.keyword" : "JODL-X-1937-#pV7"}},
                  {"term" : {"postDate" : "2017-01-01"}}
                ]
              }
            }
          ]
        }   
      }
    }
  }
}

3、梳理学习到的知识点

(1)bool:must,must_not,should:组合多个过滤条件

(2)bool可以嵌套

(3)相当于SQL中的多个and条件和or条件

若有兴趣,欢迎来加入群,【Java初学者学习交流群】:458430385,此群有Java开发人员、UI设计人员和前端工程师。有问必答,共同探讨学习,一起进步!
欢迎关注我的微信公众号【Java码农社区】,会定时推送各种干货:


qrcode_for_gh_577b64e73701_258.jpg
上一篇下一篇

猜你喜欢

热点阅读