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

前言:

在实际应用中,发现当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.hqwc.cn/news/652054.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Faust勒索病毒:了解变种faust,以及如何保护您的数据

导言: 近年来,网络安全问题日益严峻,其中勒索病毒成为了一种日益猖獗的威胁。在众多勒索病毒中,.faust勒索病毒以其高度的隐秘性和破坏性引起了广泛关注。本文91数据恢复将深入剖析.faust勒索病毒的威胁特点,并提出相…

打包的意义 作用等前端概念集合 webpack基础配置等

基础网页是什么? 在学校最基础的三剑客 原生JS CSS H5就可以开发静态网页了 对于浏览器而言也能识别这些基础的文件和语法,真正的所见即所得,非常直接。 为什么要使用框架库? 对于常用的前端框架而言,无论是Vue Rea…

微信小程序:9.小程序配置

全局配置文件 小程序根目录下的app.json文件是小程序的全局配置文件。 常用的配置文件如下: pages 记录当前小程序所有的页面存放路径信息 window 全局设置小程序窗口外观 tabBar 设置小程序底部的tabBar效果 style 是否启用新版style 小程序窗口的组成部分 了解windo节点常…

【网络技术】【Kali Linux】Wireshark嗅探(十一)以太网Ethernet协议报文捕获及分析

往期 Kali Linux 上的 Wireshark 嗅探实验见博客: 【网络技术】【Kali Linux】Wireshark嗅探(一)ping 和 ICMP 【网络技术】【Kali Linux】Wireshark嗅探(二)TCP 协议 【网络技术】【Kali Linux】Wireshark嗅探&…

封装 H.264 视频为 FLV 格式然后推流

封装 H.264 视频为 FLV 格式并通过 RTMP 推流 flyfish 协议 RTMP (Real-Time Messaging Protocol) RTSP (Real Time Streaming Protocol) SRT (Secure Reliable Transport) WebRTC RTMP(Real Time Messaging Protocol)是一种用于实时音视频流传输的协…

医院手术室麻醉信息管理系统源码 自动生成麻醉的各种医疗文书(手术风险评估表、手术安全核查表)

目录 手术风险评估表 一、患者基本信息 二、既往病史 三、手术相关信息 四、风险评估因素 五、风险评估结果 手术安全核查表 一、患者身份与手术信息核对 二、术前准备核查 三、手术团队与职责确认 四、手术物品与设备核查 五、术中关键步骤核查 六、术后核查 七…

全志ARM-蜂鸣器

sh操作准备: 1.使Tab键的缩进和批量对齐为4格 在/etc/vim/vimrc 中添加一项配置 set tabstop 4; 也可以再加一行 set nu显示代码的行数 vim的设置,修改/etc/vim/vimrc文件,需要用超级用户权限 /etc/vim/vimrc set shiftwidth4 设置批量…

杰发科技AC7840——CAN通信简介(7)_波形分析

参考: CAN总线协议_stm32_mustfeng-GitCode 开源社区 0. 简介 隐形和显性波形 整帧数据表示 1. 字节描述 CAN数据帧标准格式域段域段名位宽:bit描述帧起始SOF(Start Of Frame)1数据帧起始标志,固定为1bit显性(b0)仲裁段dentify(ID)11本数…

【介绍下如何使用CocoaPods】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

Python 基础

文章目录 一、python 的安装二、基本数据类型1. 数字类型2. 非数字类型3. type()函数 三、语法的使用1. 输入print2. 类型的转换1. 转int()类型2. 转float()类型3. 转str()类型 3.输出 print()1. 基本输出2. % 格式化输出f 字符串 4. if 判断5.if else 判断6. if elif else 判断…

普通屏幕已过时?裸眼3D屏幕显示效果更胜一筹!

随着多媒体技术的迅猛进步,我们日常生活中的内容展现方式,已经经历了前所未有的变革。在这其中,裸眼3D屏幕的应用,无疑是最为引人注目的亮点,它相较于传统屏幕,在显示效果上展现出了鲜明的优势,…

MyBatis入门学习三(缓存、高级查询、分页 插件)

目录 1、MyBatis缓存 1.1 一级缓存 1.2 二级缓存 1.2.1 MyBatis实现 1.2.2 第三方实现 2、高级查询 2.1 数据模型 2.2 创建数据库表 2.3 一对一查询 2.3.1 第一种方式 2.3.2 第二种方式 2.4 一对多查询 2.5 多对多查询 2.6 延迟加载 3、分页插件 1、MyBatis缓存 …