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日
    浏览(43)
  • Elasticsearch(es)中must以及term的基本使用

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

    2024年01月22日
    浏览(37)
  • 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日
    浏览(37)
  • Elasticsearch中should失效的问题

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

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

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

    2024年02月02日
    浏览(33)
  • 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日
    浏览(35)
  • 【干货精品分享】Elasticsearch 6.7 Should 子语句的失效

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

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

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

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

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

    2024年02月08日
    浏览(39)
  • ElasticSearch基本使用--ElasticSearch文章一

    https://www.elastic.co/cn/ 1、在当前软件行业中,搜索是一个软件系统或平台的基本功能, 学习ElasticSearch就可以为相应的软件打造出良好的搜索体验。 2、其次,ElasticSearch具备非常强的大数据分析能力。虽然Hadoop也可以做大数据分析,但是ElasticSearch的分析能力非常高,具备Hadoo

    2024年02月14日
    浏览(38)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包