ES中同时使用should和must导致只有must生效解决方案

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

背景:es嵌套查询,条件a等于某一个值且条件b等于某两个值甚至更多。
第一步:单独条件b采用should匹配多个值,可以查到预期的结果,代码如下:

BoolQueryBuilder builder = QueryBuilders.boolQuery();
for (Map<String, String> sitfTrack : sitfTracks) {
    builder.should(QueryBuilders.matchQuery("sourceCode",sitfTrack.get("interfaceCode")));
}

第二步:单独条件a采用must匹配单个值,也可以查到预期的结果,代码如下:

BoolQueryBuilder builder = QueryBuilders.boolQuery();
builder.must(QueryBuilders.termQuery("batchNum.keyword", traceLog.getBatchNum()));

第三步:合并起来查询,a和b条件同时启用,代码如下:

BoolQueryBuilder builder = QueryBuilders.boolQuery();
for (Map<String, String> sitfTrack : sitfTracks) {
    builder.should(QueryBuilders.matchQuery("sourceCode",sitfTrack.get("interfaceCode")));
}
builder.must(QueryBuilders.termQuery("batchNum.keyword", traceLog.getBatchNum()));

然而结果并未按照预期输出,得到的是a和b的并集,我们想要的是交集。
分析原理:和mysql对比,must类似于and语句,should相当于or语句,那么上面的代码代表的意思是a成立或者b成立,我们要的是a成立且b成立。
修改代码如下:

BoolQueryBuilder bu= QueryBuilders.boolQuery();
BoolQueryBuilder builder = QueryBuilders.boolQuery();
for (Map<String, String> sitfTrack : sitfTracks) {
    builder.should(QueryBuilders.matchQuery("sourceCode",sitfTrack.get("interfaceCode")));
}
//注意这里
bu.must(builder);
bu.must(QueryBuilders.termQuery("batchNum.keyword", traceLog.getBatchNum()));

可以理解为:每一个独立的查询条件都是一个BoolQueryBuilder对象,把b条件独立出来,然后再汇总到一个集体的BoolQueryBuilder对象里面,嵌套一层。解决问题。文章来源地址https://www.toymoban.com/news/detail-609640.html

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

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

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

相关文章

  • Elasticsearch 中 bool组合查询(must 和 should 组合)

    需求 查询考试成绩是 60分 或 90分 的 女生 。 所以查询条件应该这么写 sex == \\\'女\\\' ( score == 60 || score ==90 );  先看下bool的语法 在ES中的实现 方式一: 在bool查询的must 中再嵌套一层bool来做should过滤。 方式二: 使用 minimum_should_match 选项 ,至少匹配一项should子句。 GET stu/_search

    2023年04月09日
    浏览(34)
  • 【Elasticsearch】 10-DSL语法详解-复合查询bool(must、should、must_not、filter)

    Elasticsearch是一个强大的搜索引擎,它提供了丰富的查询功能,以帮助你从大规模数据集中检索相关的文档。在Elasticsearch中, bool 查询是一个非常重要和强大的工具,它允许组合多个查询子句,以构建复杂的查询逻辑。在本篇文章中,我们将深入探讨 bool 查询,包括其概述、

    2024年02月05日
    浏览(43)
  • ES 布尔查询中 minimum_should_match 参数使用避坑

    在 Elasticsearch (ES) 中,布尔查询(Boolean Query)是一种查询类型,它允许你组合多个查询子句以控制搜索结果的匹配逻辑。minimum_should_match 是布尔查询中一个重要的参数,用于指定至少应该匹配的子句数量。 minimum_should_match 的值可以是一个具体的数字,也可以是一个百分比。它

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

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

    2024年01月22日
    浏览(37)
  • 关于Elasticsearch(es)中使用sql返回结果只有1000条

    es中返回的结果只有1000条,这是默认的,想要返回更多的结果,需要做两步: 1、设置max_result_window的大小 PUT indexName/_settings { “max_result_window”:20000 } max_result_window表示结果的最大数量 但是你这样设置完了之后,查询依旧还是1000条 2、查询的时候加上fetch_size 这表示页面上显

    2024年02月14日
    浏览(41)
  • python中使用selenium进行爬虫时,导致(内存已缓存)备用内存占用过大导致崩溃问题,3个解决方案

    在使用python进行爬虫的时候,使用selenium进行爬取的时候经常会出现已缓存过大的情况,如果缓存出现过大之后再次执行的话就会计算机拒绝,但是这个时候我们的内存又有很多空间可以使用,一开始我以为是占用文件过多然后点360的那个进行文件整理和清理垃圾,结果效果

    2023年04月08日
    浏览(50)
  • 键盘win键无法使用,win+r不生效、win键没反应、Windows键失灵解决方案(亲测可以解决)

    最近几天发现自己笔记本的win键无法使用,win失灵了,但是外接键盘后则正常:。 这个问题困扰了我一周,我都以为自己的枪神坏了。 寻找了几个解决方法,网上看了好多好多稀里糊涂的办法,都是不管用的,这里给大家分享我的解法: 1:我的电脑其实是我按住Fn+win,把

    2024年02月04日
    浏览(38)
  • 使用 IDEA 时突然断电导致 git 本地分支损坏的解决方案

    使用IDEA提交项目的时候突然断电,重启后项目 git 损坏,所有文件变成了 untracked,IDEA 界面上表示为所有文件名变成绿色,并且无法 pull (也可能是无法 push) 提示 Git Pull Failed             From http://*****************             * branch                dev        - FETCH_

    2024年02月04日
    浏览(50)
  • 智能电视只有数字音频输出,传统音响只有模拟音频输入,音频连接解决方案!

            智能电视已经成为了现代家庭的必备家电设备,它不仅可以播放高清视频,还可以连接网络,享受各种在线资源。但是,智能电视的音质往往不能满足我们的要求,尤其是对于喜欢听音乐或者看大片的用户来说,智能电视的内置扬声器显得力不从心。这时候,我们

    2024年02月06日
    浏览(156)
  • Ubuntu开机桌面黑屏只有鼠标问题解决办法(搜狗输入法导致)

    参考: Ubuntu开机桌面黑屏只有鼠标问题解决办法(搜狗输入法导致) 问题描述 笔者在安装完搜狗输入法重启电脑后,电脑开机黑屏,只有鼠标的光标可以移动。笔者一开始以为是系统问题,网上查阅资料才发现有大量的网友都因为搜狗输入法而导致电脑黑屏,如果读者近期

    2024年02月16日
    浏览(53)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包