Elasticsearch同时使用should和must

这篇具有很好参考价值的文章主要介绍了Elasticsearch同时使用should和must。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题及解决方法

must和should组合查询,should失效。使用must嵌套查询,将should组成的bool查询包含在其中一个must查询中。

SearchRequest request = new SearchRequest();
request.indices("function_log");

SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
if (StringUtils.hasText(schoolName)) {
    boolQueryBuilder.must(QueryBuilders.termQuery("schoolName.keyword", schoolName));
}
if (StringUtils.hasText(typeFunction)) {
    boolQueryBuilder.must(QueryBuilders.termQuery("typeFunction.keyword", typeFunction));
}
if (StringUtils.hasText(startTime) && StringUtils.hasText(endTime)) {
    boolQueryBuilder.must(QueryBuilders.rangeQuery("createDate").gte(startTime + "T00:00:00.000Z").lte(endTime + "T23:59:59.000Z"));
}
BoolQueryBuilder shouldQuery = QueryBuilders.boolQuery();
shouldQuery.should().add(QueryBuilders.termQuery("description.keyword","查询学生信息表"));
shouldQuery.should().add(QueryBuilders.termQuery("description.keyword","获取学校访客数据"));
boolQueryBuilder.must(shouldQuery);

sourceBuilder.query(boolQueryBuilder);
request.source(sourceBuilder);
System.out.println(sourceBuilder.toString());

Elasticsearch同时使用should和must,# Elasticsearch,elasticsearch文章来源地址https://www.toymoban.com/news/detail-638124.html

GET /function_log/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "schoolName.keyword": {
              "value": "测试学校",
              "boost": 1
            }
          }
        },
        {
          "term": {
            "typeFunction.keyword": {
              "value": "教师端功能",
              "boost": 1
            }
          }
        },
        {
          "range": {
            "createDate": {
              "from": "2023-08-01T00:00:00.000Z",
              "to": "2023-08-07T23:59:59.000Z",
              "include_lower": true,
              "include_upper": true,
              "boost": 1
            }
          }
        },
        {
          "bool": {
            "should": [
              {
                "term": {
                  "description.keyword": {
                    "value": "查询学生信息表",
                    "boost": 1
                  }
                }
              },
              {
                "term": {
                  "description.keyword": {
                    "value": "获取学校访客数据",
                    "boost": 1
                  }
                }
              }
            ],
            "adjust_pure_negative": true,
            "boost": 1
          }
        }
      ],
      "adjust_pure_negative": true,
      "boost": 1
    }
  }
}

到了这里,关于Elasticsearch同时使用should和must的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • elasticsearch 父子文档使用must not 正确姿势

    1、基于elasticsearch 父子文档进行子条件查询父文档 2、需要查询出子文档不存在的父文档 1、父文档clue_list 关联很多的子文档,我们用roam子文档做测试! 2、roam子文档的结构 需求是查询出roam子文档不存在的数据,由于我们es的所有数据companyId == 1 我们可以用must not来排除 co

    2024年02月05日
    浏览(45)
  • Elasticsearch(es)中must以及term的基本使用

    在 Elasticsearch(ES)中,should 和 must 是布尔查询(Boolean Query)中常用的两个子句。 should 子句:should 表示一个或多个条件之一满足即可匹配文档。它类似于逻辑上的 OR 操作,用于构建可选项或者提升匹配文档的相关性评分。当至少一个 should 子句匹配时,文档将被认为是匹配

    2024年01月22日
    浏览(38)
  • ElasticSearch中的should 用法

    有一个场景需要实现 es_table中 isMember = 1 和 isMember !=1 其中isMember!=1有两种可能: isMember = 0 或者 isMember不存在  这种情况需要用到should,同时 跟其他条件 例如注册年在2023 是并列的关系 脚本需要用 should包含 两个条件 isMember = 0 或者 isMember不存在   GET es_table/_count {  

    2024年02月05日
    浏览(38)
  • Elasticsearch中should失效的问题

    在Elasticsearch中,当我们将must和should同级使用的时候,我们就会发现should失效了。 首先,当我们直接使用should的时候,参数minimum_should_match默认为1,此时我们使用should是可以正常返回结果的。 但是当我们将must和should同级使用的时候,此时minimum_should_match参数变为了0,也就是

    2024年02月12日
    浏览(34)
  • ElasticSearch 中 should 设定优先级

    在 Elasticsearch 中,查询时可以使用 should、must 和 must_not 来组合多个查询条件。这些定义了查询条件之间的关系,并决定了查询结果的匹配程度。 must 表示必须匹配的条件,满足 must 条件的文档才会被返回。 should 表示可选匹配的条件,至少满足一个 should 条件的

    2024年02月02日
    浏览(35)
  • ElasticSearch minimum_should_match 参数详解

    minimum_should_match :可以使用 minimum_should_match 参数来指定返回文档 必须(must) 匹配的should子句的数量或百分比。可以称他-最小匹配度 如果 bool 查询至少包含一个 should 子句,并且没有 must 或 filter 子句,则默认值为 1。 否则,默认值为 0。 minimum_should_match参数一般放到should叶子查

    2024年02月19日
    浏览(39)
  • 【干货精品分享】Elasticsearch 6.7 Should 子语句的失效

    在ES 使用多条件 查询,并且是多个条件只需要满足部分条件的时候,我们通常会使用到ES的should查询 没有should的查询情况如下: 执行包含should的语句查询结果: 这很好理解,should中的子语句,只有1个满足条件 都可以与must 进行 查询 问题:当我把should 中的条件改成只有一个

    2024年04月27日
    浏览(32)
  • Elasticsearch嵌套查询must和mustNot

    场景:在bug关联固件的时候将bug的数据放到固件的数据下,可以根据固件数据下是否包含bug数据查询出已关联和未关联的数据。 ES文档结构 目录 1.must查询此bug关联的固件 java代码 2.mustNot查询此bug未关联的固件 java代码 3.劫后余生        4.闲来无事must_not跟must下的多条件关

    2024年02月07日
    浏览(39)
  • 【Elasticsearch】Elasticsearch基本使用

    1.1 安装ES Elasticsearch下载地址 要求:JDK1.8+ Elasticsearch 与 Tomcat 类似,下载安装包后解压即可使用。我这里下载的是最新的 7.6.2 版本 解压后,首先设置跨域支持,后面可能用得上(连接es相关工具)。在 ./config/elasticsearch.yml 中添加跨域支持 在 bin 目录上方地址栏输入 cmd 打开终端输入

    2024年02月08日
    浏览(41)
  • Elasticsearch:使用 Elasticsearch 进行语义搜索

    在数字时代,搜索引擎在通过浏览互联网上的大量可用信息来检索数据方面发挥着重要作用。 此方法涉及用户在搜索栏中输入特定术语或短语,期望搜索引擎返回与这些确切匹配的结果。 虽然搜索对于简化信息检索非常有价值,但它也有其局限性。 主要缺点之

    2024年02月08日
    浏览(51)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包