4.bool组合查询

主要知识:

  • 学习bool组合查询
  • bool嵌套

   

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

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":"XHDK-A-1293-#fJ3"}}],

"must_not":[{"term":{"postDate":"2017-01-02"}}]

}

}

}

}

}

   

must:必须全部匹配,should:可以匹配其中任意一个即可,must_not:必须全部不匹配,filter:过虑。当查询条件是一个是可以用字典,查询条件是多个时要用列表.

2、搜索帖子IDXHDK-A-1293-#fJ3,或者是帖子IDJODL-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":"XHDK-A-1293-#fJ3"}},

{"bool": {

"must":[{"term":{"articleID": "JODL-X-1937-#pV7"}},

{"term":{"postDate": "2017-01-01"}}] }}

]

}

}

}

}

}

3、总结:

1bool可以mustmust_notshould,组合多个过滤条件进行查询

2bool可以嵌套bool,组合成多层bool

3bool查询相当于SQL中的多个and条件:当你把搜索语法学好了以后,基本可以实现部分常用的sql语法对应的功能。

原文地址:https://www.cnblogs.com/liuqianli/p/8482819.html