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

查询结果中,会显示匹配的查询的名字
ES组合查询-Boolean Query文章来源地址https://www.toymoban.com/news/detail-419325.html

到了这里,关于ES组合查询-Boolean Query的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 使用ES Term query查询时一定要注意的地方

    使用ES Term query查询时一定要注意的地方

    使用 Term query 可以根据精确值查找相关文档数据,不过 Term query 查询与 Match query 查询还是有区别的,有时候你会发现用 Match query 可以查到,换成 Term query 却不行,本文整理一些使用 Term query 容易出错的点供参考。 如果你查看 Term query 的官方文档,你就会发现,官网首先对

    2024年02月11日
    浏览(8)
  • 【ElasticSearch-基础篇】ES高级查询Query DSL术语级别查询并结合springboot使用

    Elasticsearch 提供了基于 JSON 的完整 Query DSL(Domain Specific Language)来定义查询。 因Query DSL是利用Rest API传递JSON格式的请求体(RequestBody)数据与ES进行交互,所以我们在使用springboot的时候也可以很方便的进行集成,本文主要讲述的就是使用springboot实现各类DSL的语法查询。 Elastics

    2024年02月01日
    浏览(11)
  • ElasticSearch系列 - SpringBoot整合ES:查询条件 query 和过滤条件 filter 的区别

    01. Elasticsearch 查询条件和过滤条件的区别? Elasticsearch中的查询条件和过滤条件都是用于搜索和过滤文档的条件,但它们之间有一些区别。 查询条件是用于计算文档相关度得分的条件,它会将所有符合条件的文档按照相关度得分从高到低排序,并返回前N个文档。查询条件可以

    2024年02月14日
    浏览(12)
  • es通过rest接口_search、_delete_by_query查询与删除数据

    es通过rest接口_search、_delete_by_query查询与删除数据

    1、rest接口查询数据 rest查询: http://localhost:9200/index_name/_search 查询表达式: postman请求截图: 2、使用Rest接口删除数据 rest删除数据: http://localhost:9200/index_name/_delete_by_query 查询表达式: postman请求截图:

    2024年02月16日
    浏览(11)
  • ES查询多个索引,但是某些索引的name不同

    参考: https://blog.csdn.net/qq_37147750/article/details/111319151 背景: 目前有四个索引index, 对于这四个index他们的字段并不完全相同,要支持筛选。 目前的问题是,其中有两个索引要先根据条件筛选一遍。后续的筛选根据这次的结果做基础。 但是这两个索引的筛选条件也不一样。 相

    2024年02月13日
    浏览(45)
  • ElasticSearch系列 - SpringBoot整合ES:多个精确值查询 terms

    ElasticSearch - SpringBoot整合ES:多个精确值查询 terms 01. ElasticSearch terms 查询支持的数据类型 在Elasticsearch中,terms查询支持多种数据类型,包括: 字符串类型:可以将多个字符串值作为数组传递给terms查询,以匹配包含任何一个指定字符串值的文档。 数值类型:可以将多个数值作

    2024年02月16日
    浏览(19)
  • 第七章-分布式搜索引擎-ES:全文查询、分词查询、精确查询、地理坐标查询、组合查询(bool、funtion_score)以及RestApi

    第七章-分布式搜索引擎-ES:全文查询、分词查询、精确查询、地理坐标查询、组合查询(bool、funtion_score)以及RestApi

    DSL查询分类 全文查询、分词查询、非分词查询、地理坐标查询、组合查询 match_all 查询所有,不需要查询条件,固定写法_search 第一个hits就是命中的数据 ,total就是条数,第二个hits是source嘞   全文检索查询 我们不要整多个字段查询,参与的字段越多,查询速度越慢,如果有

    2024年01月16日
    浏览(9)
  • es查询nested字段类型数组长度来判断是否包含多个值

    使用es时经常会碰到查询数组格式的字段是否有多个值的情况,总结一下。 一、字段类型为keywork时 当字段类型为keyword时(创建索引后,添加的第一条数据id字段格式为数组格式,便会导致后续的数据都是数组),查询id字段有多值时用以下查询语句: 二、字段类型为nested类型时

    2024年02月11日
    浏览(50)
  • 优化MyBatis查询条件:从Boolean类型判断到<choose>标签的进化

    优化MyBatis查询条件:从Boolean类型判断到<choose>标签的进化

    作为一名Java CRUD Coder,日常开发中会遇到类似的需求:通过下拉列表选择“是”或“否”来对数据库中的数据进行筛选。如果此时前端的传参是 boolean 类型的 true 和 false ,后端Mapper层的代码可能会遇到需要构造类似if (param.existFlag) and table.id not in (xxxx1,xxxx2)这样的条件查询,如

    2024年02月19日
    浏览(9)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包