ElasticSearch语句中must,must_not,should 组合关系

打印 上一主题 下一主题

主题 546|帖子 546|积分 1638

媒介:

在实际应用中,发现当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条件的数据分值会更高
实验

一、数据准备

  1. PUT mystore
  2. ----------------
  3. POST mystore/_bulk
  4. {"index":{"_id":1}}
  5. {"price":10,"productID":"XHDK-A-1293-#fJ3"}
  6. {"index":{"_id":2}}
  7. {"price":20,"productID":"XHDK-A-1293-#f20"}
  8. {"index":{"_id":3}}
  9. {"price":30,"productID":"JODL-X-1937-#pV7"}
  10. {"index":{"_id":4}}
  11. {"price":40,"productID":"QQPX-R-3956-#aD8"}
  12. {"index":{"_id":5}}
  13. {"price":50,"productID":"KDKE-B-9947-#kL5"}
  14. {"index":{"_id":6}}
  15. {"price":60,"productID":"KDKE-B-9947-#kL5"}
  16. {"index":{"_id":7}}
  17. {"price":70,"productID":"JODL-X-1937-#pV7"}
  18. {"index":{"_id":8}}
  19. {"price":80,"productID":"JODL-X-1937-#pV7"}
复制代码
二、must和must组合(A、B交集)

  1. GET mystore/_search
  2. {
  3.   "query": {
  4.     "bool": {
  5.       "must": [
  6.         {
  7.           "range": {
  8.             "price": {
  9.               "gte": 20,
  10.               "lte": 50
  11.             }
  12.           }
  13.         },
  14.          {
  15.           "range": {
  16.             "price": {
  17.               "gte": 30,
  18.               "lte": 60
  19.             }
  20.           }
  21.         }
  22.       ]
  23.     }
  24.   }
  25. }
复制代码
结果:30,40,50

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

  1. GET mystore/_search
  2. {
  3.   "query": {
  4.     "bool": {
  5.       "must_not": [
  6.         {
  7.           "match": {
  8.             "price": "40"
  9.           }
  10.         },
  11.         {
  12.           "match": {
  13.             "price": "70"
  14.           }
  15.         }
  16.       ]
  17.     }
  18.   }
  19. }
复制代码
结果:10,20,30,50,60,80

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

  1. GET mystore/_search
  2. {
  3.   "query": {
  4.     "bool": {
  5.       "should": [
  6.         {
  7.           "range": {
  8.             "price": {
  9.               "gte": 40,
  10.               "lte": 60
  11.             }
  12.           }
  13.         },
  14.          {
  15.           "range": {
  16.             "price": {
  17.               "gte": 50,
  18.               "lte": 70
  19.             }
  20.           }
  21.         }
  22.       ]
  23.     }
  24.   }
  25. }
复制代码
结果:50,60,40,70
谁命中的多,谁分数高,在前边

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

  1. GET mystore/_search
  2. {
  3.   "query": {
  4.     "bool": {
  5.       "must": [
  6.         {
  7.           "range": {
  8.             "price": {
  9.               "gte": 20,
  10.               "lte": 50
  11.             }
  12.           }
  13.         }
  14.       ],
  15.       "must_not": [
  16.         {
  17.           "match": {
  18.             "price": "40"
  19.           }
  20.         }
  21.       ]
  22.     }
  23.   }
  24. }
复制代码
结果:20,30,50

六、must和should组合(A)

  1. GET mystore/_search
  2. {
  3.   "query": {
  4.     "bool": {
  5.       "must": [
  6.         {
  7.           "range": {
  8.             "price": {
  9.               "gte": 20,
  10.               "lte": 50
  11.             }
  12.           }
  13.         }
  14.       ],
  15.       "should": [
  16.         {
  17.           "range": {
  18.             "price": {
  19.               "gte": 40,
  20.               "lte": 60
  21.             }
  22.           }
  23.         }
  24.       ]
  25.     }
  26.   }
  27. }
复制代码
结果:40,50,20,30
只展示must的数据集,但是在should中提到的数据,分数高,在前边

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

  1. GET mystore/_search
  2. {
  3.   "query": {
  4.     "bool": {
  5.       "should": [
  6.         {
  7.           "range": {
  8.             "price": {
  9.               "gte": 40,
  10.               "lte": 60
  11.             }
  12.           }
  13.         }
  14.       ],
  15.       "must_not": [
  16.         {
  17.           "match": {
  18.             "price": "40"
  19.           }
  20.         }
  21.       ]
  22.     }
  23.   }
  24. }
复制代码
结果:50,60

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

  1. GET mystore/_search
  2. {
  3.   "query": {
  4.     "bool": {
  5.       "must": [
  6.         {
  7.           "range": {
  8.             "price": {
  9.               "gte": 20,
  10.               "lte": 50
  11.             }
  12.           }
  13.         }
  14.       ],
  15.       "should": [
  16.         {
  17.           "range": {
  18.             "price": {
  19.               "gte": 40,
  20.               "lte": 60
  21.             }
  22.           }
  23.         }
  24.       ],
  25.       "must_not": [
  26.         {
  27.           "match": {
  28.             "price": "40"
  29.           }
  30.         }
  31.       ]
  32.     }
  33.   }
  34. }
复制代码
结果:50,20,30
结果就是must - must_not,不过在should中提到的数据分数高,在前边


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

杀鸡焉用牛刀

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表