前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >es boolquery 的几种用法

es boolquery 的几种用法

作者头像
用户1217611
发布2022-05-06 16:20:22
1K0
发布2022-05-06 16:20:22
举报
文章被收录于专栏:文渊之博

Bool query 包含那些?

Bool query 对应lucene 的BooleanQuery,一般由一个或者多个查询子句组成,如下表格所示:

用法

描述

must

查询一定包含匹配查询内容,并且提供得分

filter

查询一定包含匹配查询内容,但是不提供得分,会对查询结果进行缓存

should

子查询不一定包含查询内容

must_not

查询一定不包含查询内容,来自于filter 上下文,所以不会由评分,但是会缓存

bool 查询秉持匹配越多越接近的原则,每个子查询(must or should)评分会被加在一起作为最终评分。

代码语言:javascript
复制
POST _search
{
  "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
    }
  }
}

使用 minimum_should_match

可以使用minimum_should_match参数指定返回的文档必须匹配的子句的数量或百分比。

如果bool 查询包含至少一个should 子查询并且没有must 或者filter 查询,则默认数值是1.否则默认为0.

使用bool.filter评分

filter 对评分无影响返回值为0,评分只受到特殊查询影响,比如,如下三种情况的得分

代码语言:javascript
复制
使用filter,返回的文档得分都为0:
GET _search
{
  "query": {
    "bool": {
      "filter": {
        "term": {
          "status": "active"
        }
      }
    }
  }
}

使用match_all查询,所有文档评分都为1.0
GET _search
{
  "query": {
    "bool": {
      "must": {
        "match_all": {}
      },
      "filter": {
        "term": {
          "status": "active"
        }
      }
    }
  }
}
constant_score 查询与match_all 完全一致,使用filter 返回所有文档都分配一个1.0 的评分
GET _search
{
  "query": {
    "constant_score": {
      "filter": {
        "term": {
          "status": "active"
        }
      }
    }
  }
}

Named queries

每个查询在顶部的定义里面都要接收一个_name  。可以使用这种查询追踪匹配返回的文档。比如,返回命中文档必须包含一个match 查询的属性:

代码语言:javascript
复制
GET /_search
{
  "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"
        }
      }
    }
  }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-02-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Bool query 包含那些?
    • 使用 minimum_should_match
      • 使用bool.filter评分
        • Named queries
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档