史上最全的ElasticSearch系列之should must联用问题

简介: 前言文本已收录至我的GitHub仓库,欢迎Star:github.com/bin39232820…种一棵树最好的时间是十年前,其次是现在

前言


文本已收录至我的GitHub仓库,欢迎Star:github.com/bin39232820…

种一棵树最好的时间是十年前,其次是现在

絮叨


其实这个问题,也算不得是什么大问题,就是不知道的很坑,公司的搜索服务,本来不是我维护的,后面因为人员调动,给我维护了,然后他们用的竟然不是JPA,用的是RestHighLevelClient。这就很尴尬了,没有学过,然后稀里糊涂的用着。


前言 一个新功能的迭代,下面是迭代的原型


其实也很简单就是做一个听课卡的筛选出,可以使用的课程和免费的课程嘛,当时就大概看了看以前的代码,因为es这个也是自己新学的吧,但是以前学的时候用的是JPA,这次项目用的是RestHighLevelClient,然后搞来搞去,搞了很久。 因为,这个文章就是给自己的一个记录,所以也没打算说讲的很详细,就举个例子说明一下吧,具体怎么用es,我会写专门的es系列


问题


如在a=1且b=2的数据中,找出c=1或者d=2的数据

那我可能会这样写,如果你是按照sql的思维的话

{"query": {
   "bool": {
        "must": [
{"match": {
        "a": "1",
         "b": "2"
    }}
    ],
   "should": [
      {"match": {
       "c": "1"
    },
        {"match": {
        "d": "2"
        }}
    ]
}}}
复制代码


这样写的时候should是没有用的,这是新手可能犯的错误之一。 在编写查询条件的时候,不能用口头上的逻辑进行编写,而是要换成数学逻辑才能进行执行(数据库同理)。 如上例,数学逻辑应该是 (a==1&&b==2&&c==1)||(a==1&&b==2&&d==2)(java and c语言版),这样的结构去查询。


解决


{"query": {
   "bool": {
    "should": [
      {"match": {
           "a": "1",
           "b": "2",
           "c": "1"
        }}
    ],
    "should": [
      {"match": {
          "a": "1",
          "b": "2",
          "d": "2"
    }}
    ]
}}}  
复制代码


或者这样

{
   "query": {
      "bool": {
         "must": [
            {"match": {
            "a": "1",
            "b": "2"
            }},
            {
                "bool": {
                  "should": [
                     {"match": {"c": 1}},
                     {"match": {"d": 2}}
                  ]
               }
            }
         ]
      }
   }
复制代码


结尾


嗯,记录一下新手经常犯的错误,哈哈博主也是个新手菜鸡。

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
|
消息中间件 存储 NoSQL
一文读懂Kafka Connect核心概念
Kafka Connect 是一种用于在 Apache Kafka 和其他系统之间可扩展且可靠地流式传输数据的工具。 它使快速定义将大量数据移入和移出 Kafka 的连接器变得简单。 Kafka Connect 可以摄取整个数据库或从所有应用程序服务器收集指标到 Kafka 主题中,使数据可用于低延迟的流处理。 导出作业可以将数据从 Kafka 主题传送到二级存储和查询系统或批处理系统进行离线分析。
|
SQL 关系型数据库 MySQL
因为一条SQL慢查询的思考
本文探讨了MySQL中的慢查询问题,包括定义(执行时间过长的SQL语句)、如何查看慢查询(通过`long_query_time`配置)以及其对系统性能的影响。慢查询可能由缺乏索引、大数据量、网络延迟等因素引起。解决和避免慢查询的方法包括优化配置、添加索引、调整查询语句、批量处理数据、分库分表等。文章还强调了索引在提升查询性能中的作用,解释了B+树索引的工作原理,并列举了可能导致索引失效的场景。
1169 0
|
存储 IDE 开发工具
研发提效工具3 - IDEA极速打开项目方案
# 背景 作为Idea、Android Studio、PyCharm等`jetbrains`系列IDE的开发者,每次打开一个工程项目时,一般都使用鼠标点击IDE左上角的Open菜单来才做。本文介绍一种基于Alfred的快捷方式进行打开操作。 # 效果图 ![](https://ata2-img.oss-cn-zhangjiakou.aliyuncs.com/neweditor/affab
878 0
研发提效工具3 - IDEA极速打开项目方案
|
监控 Java 索引
ES 生产中10个常见参数阈值(默认最大值)操作及优化解决方案
ES 生产中10个常见参数阈值(默认最大值)操作及优化解决方案
ES 生产中10个常见参数阈值(默认最大值)操作及优化解决方案
|
Java 数据库连接 mybatis
mybatis报错:The alias 'xxx' is already mapped to the value '*.*.xxx'
The alias 'xxx' is already mapped to the value '*.*.xxx'
18698 0
|
弹性计算 运维 算法
阿里云 Elasticsearch Serverless 检索增强型 8.17 版来袭!
阿里云Elasticsearch Serverless 8.17版本,深度融合无服务器架构与分层扩展能力,面向信息检索、向量搜索、语义分析等通用场景,提供全托管服务,在最新特性扩展、自动扩缩性能、资源成本优化等维度均有显著提升。
747 15
|
Arthas 监控 Java
Arthas mbean(查看 Mbean 的信息)
Arthas mbean(查看 Mbean 的信息)
409 17
|
缓存 自然语言处理 监控
elasticsearch过滤器filter:原理及使用
elasticsearch过滤器filter:原理及使用
|
Java Linux Apache
jar 解压app.jar到指定文件夹
要将 JAR 文件(如 `app.jar`)解压到指定文件夹,可使用 Java 自带的 `jar` 工具、Apache Ant、7-Zip 或 Python 脚本。方法包括命令行操作(如 `jar xf app.jar -C /path/to/destination/folder`)、Ant 构建文件、7-Zip 图形界面或命令行,以及 Python 的 `zipfile` 模块。选择适合的方法即可轻松完成解压。
2163 3
|
自然语言处理 Java
ElasticSearch 实现分词全文检索 - term、terms查询
ElasticSearch 实现分词全文检索 - term、terms查询
731 0