当前位置:网站首页>ES中同时使用should和must导致只有must生效解决方案
ES中同时使用should和must导致只有must生效解决方案
2022-08-04 16:31:00 【RT_0114】
背景: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对象里面,嵌套一层。解决问题。
边栏推荐
- 不需要服务器,教你仅用30行代码搞定实时健康码识别
- Go语言gin框架返回json格式里,怎么把某个int属性转成string返回?
- JVM调优-GC基本原理和调优关键分析
- B 站又上热搜了, HR 称「核心用户都是 Loser」
- It took half a month to finally make a collection of high-frequency interview questions of first-tier manufacturers
- 数据库内核面试中我不会的问题(2)
- 葫芦娃解析
- 移动CM101s_MV100_EMMC_M8233_强刷后全分区线刷固件包
- MySQL学习之运算符
- 招募 | 香港理工大学Georg Kranz 博士诚招博士
猜你喜欢
面了三十个人,说说真实感受
911S5正式谢幕后 如何找到一个好用的替代品
屏幕分辨率兼容性
gcc7.5.0编译ceres-solver报错‘is_trivially_default_constructible’ is not a member of ‘std’
测试开发必备技能-Jmeter二次开发
游戏云服务器配置怎么选合理?
软考 --- 软件工程(2)软件开发方法
It took half a month to finally make a collection of high-frequency interview questions of first-tier manufacturers
06-总线
leetcode:743. 网络延迟时间【单源最短路 + dijkstra模板】
随机推荐
[TA-Frost Wolf_may-"Hundred Talents Project"] Art 2.7 Metallic and Speculer Process
线上一次JVM FullGC搞得整晚都没睡,彻底崩溃
开源一夏 | 请你谈谈网站是如何进行访问的?【web领域面试题】
Mobile magic box CM211-1_YS foundry _S905L3B_RTL8822C_wire brush firmware package
实践:二进制数据处理与封装
07-输入输出系统
LeetCode·84.柱状图中最大的矩形·单调递增栈
CSDN21天学习挑战赛——程序流程控制(02)
云存储硬核技术内幕——(8) 只缘身在此山中
浙江数码代工M301H 免拆通刷_卡刷固件包(语音OK)
Steady Development | Data and Insights on Mobile Game Players in Western Europe
UWP 转换 IBuffer 和其他类型
B 站又上热搜了, HR 称「核心用户都是 Loser」
flink cdc怎么指定位点,从某个位点开始消费mysql的Binlog?
可视化大屏丑?这篇文章教你如何做美观大屏!
不需要服务器,教你仅用30行代码搞定实时健康码识别
张乐:研发效能的黄金三角及需求与敏捷协作领域的实践|直播回顾
No server is required, teach you to get real-time health code recognition with only 30 lines of code
Minecraft HMCL 第三方启动器使用教程
JVM Tuning-GC Fundamentals and Tuning Key Analysis