首页 > 其他分享 >谷粒商城实战笔记-115-全文检索-ElasticSearch-进阶-bool复合查询

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

时间:2024-08-03 09:55:38浏览次数:13  
标签:进阶 should 115 全文检索 文档 条件 查询 match must

文章目录

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,则查询出来的结果更少。

标签:进阶,should,115,全文检索,文档,条件,查询,match,must
From: https://blog.csdn.net/epitomizelu/article/details/140884368

相关文章

  • 谷粒商城实战笔记-118-全文检索-ElasticSearch-进阶-aggregations聚合分析
    文章目录一,基本概念主要聚合类型二,实战1,搜索address中包含mill的所有人的年龄分布以及平均年龄,但不显示这些人的详情2,按照年龄聚合,并且请求每个年龄的平均薪资Elasticsearch的聚合(Aggregations)功能允许用户对数据集进行聚合分析,从而获得数据的摘要信息。聚......
  • 我的新书《Android系统多媒体进阶实战》正式发售了!!!
    我的新书要正式发售了,把链接贴在下面,感兴趣的朋友可以支持下。❶发售平台:当当,京东,抖音北航社平台,小红书,b站❷目前当当和京东已开启预售❸当当网https://u.dangdang.com/KIDHJ❹京东商城https://item.m.jd.com/product/10109083199634.html?gx=RnAoqRAjajbdh8lR5Q&gxd......
  • 面向对象进阶:多态、内部类、常用API
    目录 Java中的接口Java中的内部类 常用APIStringBuilder类Java高级面向对象编程在这篇博客文章中,我们将探索Java中的高级面向对象编程概念,包括接口、内部类和常用API。每个概念都将通过代码示例来演示它们的应用。 Java中的接口 什么是接口?接口是Java中的一种引......
  • SQL进阶技巧:Hive如何巧解和差计算的递归问题?【应用案例2】
    目录0问题描述1数据准备2问题分析3小结 0问题描述有如下数据:反应了每月的页面浏览量现需要按照如下规则计算每月的累计阅读量,具体计算规则如下:最终结果如下:1数据准备withdataas(select'2024-01'asmonth,2aspvunionallselect'2024-02'asm......
  • 2024年网络安全学习指南!详尽路线图,从零基础到黑客高手的进阶之路!_网络安全自学路线图
    零基础小白,到就业!入门到入土的网安/黑客学习路线!建议的学习顺序:一、网络安全学习普法(心里有个数,要进去坐几年!)1、了解并介绍《网络安全法》2、《全国人大常委会关于维护互联网安全的决定》3、《中华人民共和国计算机信息系统安全保护条例(2011年修正)》4、《中华人民共......
  • 程序员进阶架构知识体系、开发运维工具使用、Java体系知识扩展、前后端分离流程详解、
    场景作为一名开发者,势必经历过从入门到自学、从基础到进阶、从学习到强化的过程。当经历过几年企业级开发的磨炼,再回头看之前的开发过程、成长阶段发现确实是走了好多的弯路。作为一名终身学习的信奉者,秉承持续学习、持续优化的信念。不惜耗费无数个日日夜夜,耗费大量时间精力......
  • SpringBoot入门、进阶、强化、扩展、知识体系完善等知识点学习、性能优化、源码分析专
    场景作为一名Java开发者,SpringBoot已经成为日常开发所必须。势必经历过从入门到自学、从基础到进阶、从学习到强化的过程。当经历过几年企业级开发的磨炼,再回头看之前的开发过程、成长阶段发现确实是走了好多的弯路。作为一名终身学习的信奉者,秉承Java体系需持续学习、持续优......
  • Java入门、进阶、强化、扩展、知识体系完善等知识点学习、性能优化、源码分析专栏分享
    场景作为一名Java开发者,势必经历过从入门到自学、从基础到进阶、从学习到强化的过程。当经历过几年企业级开发的磨炼,再回头看之前的开发过程、成长阶段发现确实是走了好多的弯路。作为一名终身学习的信奉者,秉承Java体系需持续学习、持续优化的信念。不惜耗费无数个日日夜夜,耗......
  • 【架构师进阶必备】Spring - 运行时以四种方式动态注册 bean
    Spring—运行时以四种方式动态注册bean1.概述在本教程中,我们将学习“使用spring动态注册bean”或“在运行时动态将bean添加到spring-context”。在Spring应用程序中加载和删除bean时,无需在运行时重新启动应用程序即可完成此操作。如果客户端代码需要注册不......
  • Linux学习笔记8(Find命令进阶学习)
    目录通过所有者来查找1.指定所属的用户2.指定所属的组通过权限来查找1.指定精确的权限查找2.指定所有者(用户、组、其他人)至少有一个拥有此权限即可3.指定文件最低权限查找,即大于等于4.查找文件不是指定的权限(取反)5.查找所有只读的文件6.查找所有可执行文件......