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

devtools/2024/10/21 3:07:52/

前言:

在实际应用中,发现当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中提到的数据分数高,在前边
在这里插入图片描述


http://www.ppmy.cn/devtools/19214.html

相关文章

JavaScript基础(一)

小白学先送两个网站: https://www.runoob.com/js/js-tutorial.html https://www.w3school.com.cn/js/index.asp 无论现在学习还是以后从事开发一定要学会自己查文档看,尤其是你做一线开发学新技术,你只能上人家官网看。 为什么要学习JavaScript JavaS…

从C语言到C++过渡篇(快速入门C++)

目录 引言 命名空间 C 的输入输出(cout & cin) 输出 cout 输入 cin 缺省参数 函数重载 知识要点讲解 函数重载底层 引用& 内联函数 auto & nullptr 结语 引言 很多同学从C语言到C的转变不知从何下手,今天这篇文章主…

《数字化决策》第三版的启示

目录 一、《数字化决策》读后感 二、《数字化决策》给人的启示 三、思考题 一、《数字化决策》读后感 随着科技的飞速发展,数字化已经成为商业领域的核心力量。在这样的背景下,《数字化决策》第三版为我们提供了宝贵的认知提升,帮助我们更…

【OceanBase诊断调优】—— 4013 内存爆问题的排查

本文介绍 4013 内存爆问题的排查。 内存爆的类型 内存爆主要分为五类,可以通过关键词 OOPS 确定内存爆的类型。 内存爆的类型日志信息(关键字为 [OOPS])SINGLE_ALLOC_SIZE_OVERFLOWsingle alloc size large than 4G is not allowed(alloc_…

Linux下基本指令-掌握

目录 为什么要学命令行 Linux下基本指令-掌握 ls 指令 pwd命令 cd 指令 touch指令 mkdir指令(重要): rmdir指令 && rm 指令(重要): man指令(重要): cp指…

白帽子讲Web安全读书笔记

-- 书的结构 4大篇共18章: 我的安全世界观:安全历史->作者对安全的看法与态度->思考问题的方式和做事的方法客户端脚本攻击:对浏览器的深入理解将有助于做好该解决方案服务端应用安全:网站安全建设之初的重点处理问题大安…

Fisher判别:理解数据分类的经典方法

在机器学习和统计分类的领域中,Fisher判别(也称为Fisher线性判别分析)是一种非常重要的方法,旨在从数据中提取重要特征,以实现对样本的分类。即Fisher判别分析(Fisher Discriminant Analysis, FDA&#xff…

WPF之Label

Label在wpf中表示控件的文本标签&#xff0c;并提供访问密钥支持。 常用属性: 属性 HorizontalContentAlignment文本水平内容排列VerticalContentAlignment垂直内容排列width宽height高fontsize字体大小fontfamily字体样式fontwidth字体粗细 具体写法 <Label Width"20…