谷粒商城实战笔记-115-全文检索-ElasticSearch-进阶-bool复合查询

news2024/11/24 17:10:19

文章目录

    • 1,must
    • 2,must not
    • 3,should

1,must

{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "gender": "M"
          }
        },
        {
          "match": {
            "address": "mill"
          }
        }
      ]
    }
  }
}
  • bool: 这是一个布尔查询,用于组合多个查询条件。
  • must: 表示查询中必须满足的条件。如果文档不满足must中的任何条件,它将不会被包含在搜索结果中。

具体到这段代码,它定义了一个查询,其条件如下:

  • 必须匹配性别为男性(gender:"M"
  • 必须匹配邮件中包含mill
  • 以上两个条件都匹配的文档才能命中
  • 结果如下,满足3个文档
    在这里插入图片描述

2,must not

{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "gender": "M"
          }
        },
        {
          "match": {
            "address": "mill"
          }
        }
      ],
      "must_not": [
        {
          "match": {
            "age": "28"
          }
        }
      ]
    }
  }
}
  • bool: 布尔查询组合多个查询条件。
  • must: 表示查询中必须满足的条件。如果文档不满足must中的任何条件,它将不会被包含在搜索结果中。
  • must_not: 表示查询中必须不满足的条件。如果文档满足must_not中的任何条件,它将不会被包含在搜索结果中。

具体到这段代码,定义了一个bool查询,其条件如下:

  • 必须匹配性别为男性(gender:"M"
  • 必须匹配邮件包含mill
  • 必须不匹配年龄为28岁的文档(age:"28"
  • 相对于前一个查询,多了must not条件规定的年龄不能是28岁,条件更多更严苛,命中的文档更少
    在这里插入图片描述

3,should

在布尔查询中,should子句用于指定一组可选条件。这些条件不是必须满足的,但如果文档满足这些条件,它们可以提高文档的相关性得分(即_score)。should子句通常与minimum_should_match参数一起使用,这个参数指定了至少需要多少个should条件被满足,文档才会被认为是匹配的。

这里是should子句的一些关键点:

  1. 可选性should中的条件是可选的,不强制要求文档必须满足。
  2. 提升得分:如果文档满足should中的条件,它的得分可能会提高,这取决于查询的构建方式和Elasticsearch的算法。
  3. minimum_should_match:这个参数定义了至少需要多少个should条件被满足。例如,如果你有3个should条件,你可以设置minimum_should_match为2,这意味着文档至少需要满足2个条件才能被认为是匹配的。
  4. mustmust_not结合使用should可以与must(必须满足的条件)和must_not(必须不满足的条件)一起使用,以构建复杂的查询。
GET bank/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "gender": "M"
          }
        },
        {
          "match": {
            "address": "mill"
          }
        }
      ],
      "must_not": [
        {
          "match": {
            "age": "18"
          }
        }
      ],
      "should": [
        {
          "match": {
            "lastname": "Wallace"
          }
        }
      ],
      "minimum_should_match": 0
    }
  }
}
  • bool:布尔查询,它允许组合多个查询条件。

    • must:包含必须满足的查询条件。文档必须满足must中的所有条件才会被包含在搜索结果中。在这个例子中,must有两个条件:

      • 性别(gender)必须是"M"。
      • 地址(address)必须包含"mill"。
    • must_not:包含必须不满足的查询条件。文档如果满足must_not中的任何条件,将不会被包含在搜索结果中。在这个例子中,must_not有一个条件:

      • 年龄(age)不能是"18"。
    • should:包含可选的查询条件。如果文档满足should中的条件,它可以提高文档的相关性得分,但不是必需的。在这个例子中,should有一个条件:

      • 姓氏(lastname)必须是"Wallace"。
    • minimum_should_match:指定至少需要多少个should条件被满足。在这个例子中,minimum_should_match设置为0,这意味着即使没有should条件被满足,文档也可以出现在搜索结果中。这个设置通常用于不强制要求should条件,但希望它们能够影响文档得分的情况。

总结来说,这个查询将返回bank索引中满足以下条件的文档:

  • 性别为男性(“M”)。
  • 地址包含"mill"。
  • 年龄不是18岁。
  • (可选)姓氏为Wallace的文档可能会获得更高的相关性得分,但这不是必需的。

需要注意的,shouldminimum_should_match配合使用,如果minimum_should_match等于1,必须满足should中至少1个条件,相当于must,当比must更灵活,因为should中如果有多个条件的话,只需要满足任意一个即可。

如果,把上面的查询中的minimum_should_match值改为1,则查询出来的结果更少。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1973359.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java代码审计-SQL的注入

0x01 前言 Java里面常见的数据库连接方式有三种,分别是JDBC,Mybatis,和Hibernate。 0x02 JDBC注入场景 很早之前的Javaweb都是用JDBC的方式连接数据库然后去实现dao接口再调service业务层去实现功能代码JDBC连接代码 WebServlet("/d…

科技云报道:大模型引领技术浪潮,AI安全治理面临“大考”

科技云报道原创。 从文生文到文生图,再到文生视频,近年来,以ChatGPT、Sora等为代表的大模型引领了全球人工智能技术与产业的新一轮浪潮。2024年更是被业内称为大模型应用爆发元年。 年初,Sora横空出世验证了Scalling Law在视频生…

计算机的错误计算(五十)

摘要 扩展了计算机的错误计算(四十九)中的代码。同时发现,误差也“扩展”了。 下面是代码: import torch# 设置随机种子 torch.manual_seed(0)# 创建张量并移动到GPU W1 torch.randn(5, 3) * 10 W1 W1.to(cuda) X1 torch.ran…

高级宏定义

平时常说的 C 语言三大预处理功能是什么?(吹牛谈资,不能不知) 答:宏定义;文件包含;条件编译。 说到底,宏定义的实质是什么? 答:替换。 关于宏定义有一点…

CSS技巧专栏:一日一例 18 -纯CSS实现背景浮光掠影的按钮特效

CSS技巧专栏:一日一例 18 -纯CSS实现背景浮光掠影的按钮特效 先发图,再说话: 案例图片 案例分析 按钮是好几种颜色的背景色组成的,使用css的话,应该会有几个不同颜色的层,在按钮后面移动。每个层互相叠加,大概还会用到图片混合模式产生了更多的叠加的颜色,然后边缘过…

云计算实训20——mysql数据库安装及应用(增、删、改、查)

一、mysql安装基本步骤 1.下载安装包 wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.33-1.el7.x86_64.rpm-bundle.tar 2.解压 tar -xf mysql-8.0.33-1.el7.x86_64.rpm-bundle.tar 3.卸载mariadb yum -y remove mariadb 查看解压后的包 [rootmysq…

二叉树遍历算法的应用

1、二叉树的创建 2、二叉树的复制 3、二叉树的深度 4、计算结点总个数

jsp 自定义taglib

一、简介 我们在javaWeb开发中,经常会用到jsp的taglib标签,有时候并不能满足我们的实际需要,这就需要我们自定义taglib标签, 二、开发步骤 1、编写control方法,继承BodyTagSupport 2、定义zdytaglib.tld标签文件 3、…

AI Agent 如何入门?来看看这本新书!!!

半个月前,粗心的我细心地发现,有一本关于 Agent 的书籍,作者还是熟悉的咖哥(黄佳老师,当年拜读过他的《零基础学机器学习》)。 而在昨天,我终于收到了!立刻花了半个小时品读起来~觉…

LeetCode 572.另一棵树的子树 C写法

LeetCode 572.另一棵树的子树 C写法 思路🧐: 可以用上判断两棵树是否相同的方法,root的每个结点都去与subroot进行该方法的比较,如果有一轮比较成功就表示root包含subroot。 代码🔎: bool isSameTree(struc…

【时时三省】(C语言基础)函数的声明和定义

山不在高,有仙则名。水不在深,有龙则灵。 ——csdn时时三省 函数声明 1.告诉编译器有一个函数叫什么,参数是什么,返回类型是什么。但是具体是不是存在,无关紧要。 2.函数的声明一般出现在函数的使用之前。要满足先声…

视频监控汇聚平台LntonCVS安防管理平台构建互联网视频监控安全管理系统方案

随着互联网和人工智能技术的发展,我们致力于建设一种云端平台,统一整合各类二三类视频资源,实现对网络工程最后100米、10米甚至1米的全域覆盖。 依托互联网与VPN网络,我们提供了一种视频监控安全管理系统方案,集成了大…

SpringSecurity+Mysql数据库实现用户安全登录认证

Spring Security 是一个提供身份认证、授权和防范常见攻击的安全权限框架。无论是对命令式,还是响应式web应用程序都完美支持,现在主要用作保护基于 Spring 框架的应用程序的事实标准。相对于shiro来说,SpringSecurity功能更加复杂而且更加强…

深入浅出:可视化理解揭示决策树与梯度提升背后的数学原理

决策树是一种非参数的监督学习算法,可用于分类和回归。它使用类似树的结构来表示决策及其潜在结果。决策树易于理解和解释,并且可以轻松地进行可视化。但是当决策树模型变得过于复杂时,它不能很好地从训练数据中泛化,会导致过拟合…

64、ELK记录nginx、httpd、mysqld日志

logstash收集服务日志文件 一、logstash收集appache日志文件,转发到elasticsearch 1、建立在elk1、2、3搭建好elk架构基础之上192.168.168.61 es1 2/4g192.168.168.62 es2 2/4g192.168.168.63 logstash kibana nginx/http 4/8g三台开启服务systemctl s…

《数据结构》(C语言版)第1章 绪论(上)

第1章 绪论 1.1 数据结构的研究内容1.2 基本概念和术语 1.1 数据结构的研究内容 N.沃思(Niklaus Wirth)教授提出: 程序算法数据结构 电子计算机的主要用途 早期:主要用于数值计算 后来:非数值计算,复杂的具有一定结构…

Gstreamer配合srs服务器实现RTMP直播和WebRtc直播

前言 上一篇文章,实现了配合腾讯云直播的推流,但是需要花钱,于是就在思考能不能搞一个局域网内,免费的RTMP直播呢? 最终发现了可以使用srs服务器。如果成功了,以后也可以使用webrtc的直播推流。 以下是实现效果: 一、搭建srs服务器: 参考:ubuntu环境下搭建SRS服务器(…

windows系统关闭开机自检硬盘

效果: 注册表关闭开机硬盘自检,你可以按照以下步骤操作: 打开注册表编辑器: 按 Win R 键打开“运行”对话框。输入 regedit 并按回车,打开注册表编辑器。 定位到自检相关的键: 依次展开以下路径&#x…

认识经典蓝牙

现在BLE很流行,本人接触BLE也更多,而对经典蓝牙BR/EDR的开发知之甚少,而且网上关于经典蓝牙的资料也很少,所以,想要有更多了解。 参考: https://www.nordicsemi.cn/news/bluetoothle-and-bluetoothclassic/…

mac|运行别人的SpringBoot+Vue项目

一、运行vue 1、查看项目版本,在package.json中查看,在dependencies中的vue就是对应的版本 2、查看本机的vue版本:vue -V 3、删除node_modules 、package-lock.json 4、运行npm install 如果卡住不动,可能是因为网络问题&…