ElasticSearch---es用should表示or的逻辑
should
在使用es时,如果需要用到or逻辑,可以使用should。
minimum_should_match
should,可以配合 minimum_should_match 使用。
minimum_should_match是最低匹配度, minimum_should_match为1, 表示should条件中,至少有一项符合。
注意,should和must一起用,should会失效,加上minimum_should_match 就可以了。
示例1
比如, a && (b or c) ,可以如下所示:
{
"bool" : {
"filter" : [
{
"terms" : {
"查询条件a" : [
"a值"
],
"boost" : 1.0
}
}
],
"should" : [
{
"terms" : {
"查询条件b" : [
"b值"
],
"boost" : 1.0
}
},
{
"terms" : {
"查询条件c" : [
"c值"
],
"boost" : 1.0
}
}
],
"disable_coord" : false,
"adjust_pure_negative" : true,
"minimum_should_match" : "1",
"boost" : 1.0
}
}
对应的java代码如下:
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
boolQuery.filter(QueryBuilders.termsQuery("查询条件a", "a值"));
boolQuery.should(QueryBuilders.termsQuery("查询条件b", "b值"))
.should(QueryBuilders.termsQuery("查询条件c", "c值"))
.minimumShouldMatch(1);
示例2
比如, a && ((b && c) or (d && e)) ,可以如下所示:
{
"bool" : {
"filter" : [
{
"terms" : {
"查询条件a" : [
"值a"
],
"boost" : 1.0
}
}
],
"should" : [
{
"bool" : {
"must" : [
{
"terms" : {
"查询条件b" : [
"值b"
],
"boost" : 1.0
}
},
{
"term" : {
"查询条件c" : {
"value" : "值c",
"boost" : 1.0
}
}
}
],
"disable_coord" : false,
"adjust_pure_negative" : true,
"boost" : 1.0
}
},
{
"bool" : {
"must" : [
{
"terms" : {
"查询条件d" : [
"值d"
],
"boost" : 1.0
}
},
{
"term" : {
"查询条件e" : {
"value" : "值e",
"boost" : 1.0
}
}
}
],
"disable_coord" : false,
"adjust_pure_negative" : true,
"boost" : 1.0
}
}
],
"disable_coord" : false,
"adjust_pure_negative" : true,
"minimum_should_match" : "1",
"boost" : 1.0
}
}
对应的java代码如下:
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
boolQuery.filter(QueryBuilders.termsQuery("查询条件a", "值a"));
boolQuery.should(QueryBuilders.boolQuery().must(QueryBuilders.termsQuery("查询条件b", "值b"))
.must(QueryBuilders.termQuery("查询条件c", "值c")))
.should(QueryBuilders.boolQuery().must(QueryBuilders.termsQuery("查询条件d", "值d"))
.must(QueryBuilders.termQuery("查询条件e", "值e")))
.minimumShouldMatch(1);
System.out.println(boolQuery);
小技巧: 直接写dsl,会比较麻烦,用代码去把dsl打印出来,会方便很多。
参考资料
http://events.jianshu.io/p/84789dd89dcf
https://blog.csdn.net/qq_31748587/article/details/101449613
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2018-09-26 windows环境下搭建kafka
2017-09-26 Git常用命令