栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

ES组合查询-Boolean Query

ES组合查询-Boolean Query

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"
        }
      }
    }
  }
}

查询结果中,会显示匹配的查询的名字

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/706461.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号