ElasticSearch语句中must,must_not,should 组合关系
创始人
2024-11-04 12:07:27
0

前言:

在实际应用中,发现当bool中同时使用must和should 没有达到想要的想过,而是只展示了must中的命中数据,所以打算探究一下bool中 三种逻辑关系的组合。
在这里插入图片描述
上述查询语句只展示了must的结果,没有should中的结果,(我一开始以为是must 和 should 是交集的关系)

概念

一、单个使用概念

  • must(且):数组里面的条件都要满足,该条数据才被选择,所有的条件为且的关系,既交集
  • must_not(或,然后取反):数组里面的条件满足其中一个,该条数据则不被选择,既差集
  • should(或):数组里面的条件满足其中一个,该条数据被选择,既并集

二、must和must组合(A、B交集)

  • 多个must 组合,就是求这些条件数据的交集

三、must_not和must_not组合(all-A-B)

  • 多个must_not组合,就是全部的数据减去命中 must_not 的数据集

四、should和should组合(A、B并集)

  • 多个should组合,就是求这些条件数据的并集

五、must和must_not组合(A-B)

  • 满足must的数据减去满足must_not的数据则是最终结果

六、must和should组合(A)

  • 满足must的数据
  • should用来打分(字段为:_score ),影响返回排序
  • 满足should条件的数据分值会更高

七、should和must_not组合(A-B)

  • 满足should的数据减去满足must_not的数据则是最终结果

八、must和should和must_not组合(A-C)

  • 满足must的数据减去满足must_not的数据则是最终结果
  • should用来打分,影响返回排序
  • 满足should条件的数据分值会更高

实验

一、数据准备

PUT mystore ---------------- POST mystore/_bulk {"index":{"_id":1}} {"price":10,"productID":"XHDK-A-1293-#fJ3"} {"index":{"_id":2}} {"price":20,"productID":"XHDK-A-1293-#f20"} {"index":{"_id":3}} {"price":30,"productID":"JODL-X-1937-#pV7"} {"index":{"_id":4}} {"price":40,"productID":"QQPX-R-3956-#aD8"} {"index":{"_id":5}} {"price":50,"productID":"KDKE-B-9947-#kL5"} {"index":{"_id":6}} {"price":60,"productID":"KDKE-B-9947-#kL5"} {"index":{"_id":7}} {"price":70,"productID":"JODL-X-1937-#pV7"} {"index":{"_id":8}} {"price":80,"productID":"JODL-X-1937-#pV7"}  

二、must和must组合(A、B交集)

GET mystore/_search {   "query": {     "bool": {       "must": [         {           "range": {             "price": {               "gte": 20,               "lte": 50             }           }         },          {           "range": {             "price": {               "gte": 30,               "lte": 60             }           }         }       ]     }   } } 

结果:30,40,50
在这里插入图片描述

三、must_not和must_not组合(all-A-B)

GET mystore/_search {   "query": {     "bool": {       "must_not": [         {           "match": {             "price": "40"           }         },         {           "match": {             "price": "70"           }         }       ]     }   } } 

结果:10,20,30,50,60,80
在这里插入图片描述

四、should和should组合(A、B并集)

GET mystore/_search {   "query": {     "bool": {       "should": [         {           "range": {             "price": {               "gte": 40,               "lte": 60             }           }         },          {           "range": {             "price": {               "gte": 50,               "lte": 70             }           }         }       ]     }   } } 

结果:50,60,40,70
谁命中的多,谁分数高,在前边
在这里插入图片描述

五、must和must_not组合(A-B)

GET mystore/_search {   "query": {     "bool": {       "must": [         {           "range": {             "price": {               "gte": 20,               "lte": 50             }           }         }       ],       "must_not": [         {           "match": {             "price": "40"           }         }       ]     }   } }  

结果:20,30,50
在这里插入图片描述

六、must和should组合(A)

GET mystore/_search {   "query": {     "bool": {       "must": [         {           "range": {             "price": {               "gte": 20,               "lte": 50             }           }         }       ],       "should": [         {           "range": {             "price": {               "gte": 40,               "lte": 60             }           }         }       ]     }   } } 

结果:40,50,20,30
只展示must的数据集,但是在should中提到的数据,分数高,在前边
在这里插入图片描述

七、should和must_not组合(A-B)

GET mystore/_search {   "query": {     "bool": {       "should": [         {           "range": {             "price": {               "gte": 40,               "lte": 60             }           }         }       ],       "must_not": [         {           "match": {             "price": "40"           }         }       ]     }   } } 

结果:50,60
在这里插入图片描述

八、must和should和must_not组合(A-C)

GET mystore/_search {   "query": {     "bool": {       "must": [         {           "range": {             "price": {               "gte": 20,               "lte": 50             }           }         }       ],       "should": [         {           "range": {             "price": {               "gte": 40,               "lte": 60             }           }         }       ],       "must_not": [         {           "match": {             "price": "40"           }         }       ]     }   } } 

结果:50,20,30
结果就是must - must_not,不过在should中提到的数据分数高,在前边
在这里插入图片描述

相关内容

热门资讯

技巧辅助挂!pokermast... 技巧辅助挂!pokermaster修改器,丹东约战麻将辅助器,演示教程(有挂细节)1、点击下载安装,...
现场直击!wepokerplu... 现场直击!wepokerplus万能挂,丰城双剑新版最强高分攻略,操作教程(有挂方针)1.丰城双剑新...
插件辅助挂!wepoker有辅... 插件辅助挂!wepoker有辅助器吗,乐平包王攻略,学习教程(有挂方略)1、首先打开乐平包王攻略辅助...
据玩家消息!拱趴大菠萝辅助神器... 据玩家消息!拱趴大菠萝辅助神器,多乐跑得快辅助器,机巧教程(证实有挂)1、在拱趴大菠萝辅助神器插件功...
此事备受玩家关注!来玩app破... 此事备受玩家关注!来玩app破解版,h5能反杀吗,绝活教程(有挂详细)1、打开软件启动之后找到中间准...
值得注意的是!aapoker破... 值得注意的是!aapoker破解侠是真的吗,蜀山四川游戏修改工具,经验教程(有挂助手)1、金币登录送...
第三方辅助!wepoker脚本... 第三方辅助!wepoker脚本,广东星悦有外开挂辅助器吗,法门教程(有挂分析)广东星悦有外开挂辅助器...
此事引发广泛关注!德州透视脚本... 此事引发广泛关注!德州透视脚本,崇阳斗棋辅助脚本视频,诀窍教程(的确有挂)暗藏猫腻,小编详细说明崇阳...
黑科技辅助挂!wepoker买... 黑科技辅助挂!wepoker买脚本靠谱吗,情怀七喜游戏辅助,法门教程(有挂方法)1、每一步都需要思考...
方法辅助挂!aapoker怎么... 方法辅助挂!aapoker怎么设置提高好牌几率,蘑菇云辅助使用视频,绝活儿教程(讲解有挂)1、完成蘑...