• 本系列笔记结合HTTP请求(使用postman调用,源文件见GitHub)和ElasticsearchRestTemplate进行调用学习
  • ElasticsearchRestTemplate封装了RestHighLevelClient,有些场景还得用RestHighLevelClient来操作
  • 版本说明:使用的SpringBoot-2.3.5,对应的ElasticSearch-7.6.2;所以还是可以用RestHighLevelClient
  • ElasticSearch-7.15后就弃用了RestHighLevelClient,可见官网文档,之后的版本可以开启客户端兼容来维持正常使用
1. 多条件组合布尔查询 - bool:

像match、term查询都是只有一个条件,像多个条件查询时,就可以永bool组合查询,可以有4中情形:

  • must:子句(查询)必须出现在匹配的文档中,并将有助于得分
  • filter:子句(查询)必须出现在匹配的文档中,但不做评分
  • should:子句(查询)应出现在匹配文档中, 匹配 should 条件的最小数目可通过设置minimum_should_match 参数
  • must_not:子句(查询)不能出现在匹配的文档中,同样不做评分

【数据准备】:添加两个文档,name为keyword类型,address为text类型

  • “name”: “Tom Wilson”,“address”: “China BJ”
  • “name”: “Tom Wilson”,“address”: “China SZ”
1.1. bool.must:

must里面可以有多个条件,条件匹配可以是match或term,文档必须对多个字段都匹配,类似and

【HTTP请求】:只匹配name会有两个文档,但还要满足"SZ"的匹配,就只能搜索到一文档
·在这里插入图片描述

1.2. bool.should:

should里面可以有多个条件,条件匹配可以是match或term,支持minimum_should_match参数,类似or

【HTTP请求】:minimum_should_match为2,文档要两个条件都满足,所以只有一个文档
·在这里插入图片描述

1.3. bool.filter:

filter里面可以有多个条件,条件匹配可以是match或term,filter对结果是不作评分的,所以score为0

【HTTP请求】:
·在这里插入图片描述
【题外】:使用constant_score 的filter,会对结果进行评分,score为1.0
·
在这里插入图片描述

1.4. bool的API:

使用boolQuery来构建QueryBuilder

在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐