ToB企服应用市场:ToB评测及商务社交产业平台

标题: ElasticSearch语句中must,must_not,should 组合关系 [打印本页]

作者: 杀鸡焉用牛刀    时间: 2024-8-9 21:53
标题: ElasticSearch语句中must,must_not,should 组合关系
媒介:

在实际应用中,发现当bool中同时利用must和should 没有到达想要的想过,而是只展示了must中的命中数据,以是计划探究一下bool中 三种逻辑关系的组合。

上述查询语句只展示了must的结果,没有should中的结果,(我一开始以为是must 和 should 是交集的关系)
概念

一、单个利用概念


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


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


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


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


六、must和should组合(A)


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


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


实验

一、数据准备

  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企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4