BooleanQuery可以将多个查询语句组合在一起。下面是一个基础的模板:

{
  "query": {
    "bool" : {
      "must" : {
        "term" : { "user.id" : "kimchy" }
      },
      "filter": {
        "term" : { "tags" : "production" }
      },
      "must_not" : {
        "range" : {
          "age" : { "gte" : 10, "lte" : 20 }
        }
      },
      "should" : [
        { "term" : { "tags" : "env1" } },
        { "term" : { "tags" : "deployed" } }
      ],
      "minimum_should_match" : 1,
      "boost" : 1.0
    }
  }
}

上面是从官网搬过来的官网地址

  • must 中的语句是必须满足的,会影响最终文档的得分
  • filter 中的语句是必须满足的,但是不会影响最终的得分
  • must_not 中的语句是必须不满足的, 不影响最终的得分
  • should中的语句是可以满足的,影响得分,minimum_should_match就是为这兄弟设置的
minimum_should_match

用于设置should中有多少个子句得被匹配,可以设置的值有很多种:

  • 整数, 比如3,说明至少应该有3个子句被匹配
  • 负数,比如-2,说明至少应该有(子句总数-2)个子句被匹配
  • 百分数,比如75%,说明至少应该有(子句总数*0.75,向下取整)个子句被匹配
  • 负百分数,比如-25%,说明至少应该有(子句总数*(1-0.25),向下取整)个子句被匹配
  • 多个值组合,比如3<90%,说明当子句个数大于等于1小于等于3时,所有的子句都得满足;如果大于3那么就要满足(子句总数*0.9)
  • 更牛x的多个值组合,比如 2<-25% 9<-3,说明当子句个数大于等于1小于等于2时,所有的子句都得满足;如果大于2小于等于9,那么满足(子句总数*(1-0.25))个子句被满足;如果子句总数大于9,那么就有(子句总数-3)个子句被满足。

一些补充:

  • 当使用百分数时,遇到奇数的情况,比如总数是5,75%则得到的结果是3, -25%则得到的结果是1,也就意味着有4个子句要被满足
  • 如果最终计算结果大于子句的总数,那么此时minimum_should_match是无效的
给查询起名字

模板

{
  "query": {
    "bool": {
      "should": [
        { "match": { "name.first": { "query": "shay", "_name": "first" } } },
        { "match": { "name.last": { "query": "banon", "_name": "last" } } }
      ],
      "filter": {
        "terms": {
          "name.last": [ "banon", "kimchy" ],
          "_name": "test"
        }
      }
    }
  }
}

查询结果中,会显示匹配的查询的名字
在这里插入图片描述

Logo

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

更多推荐