ElasticSearch8.X查询DSL语法案例进阶实战

news2025/2/23 6:20:43

什么是Query DSL

  • Query DSL主要由两部分组成:查询和过滤。
    • 查询部分:用于指定搜索条件和匹配规则。例如,可以使用match查询进行全文检索,term查询进行精确匹配,range查询进行范围匹配等。
    • 过滤部分:用于对查询结果进行进一步的筛选和过滤。与查询查询不同,过滤查询不会影响得分计算,只是对结果进行简单的筛选操作。

查询子句

  • term查询:匹配一个精确值,如一个单词或一个数字
{ "term": { "name":"lifly" } }
  • match查询:匹配一个查询字符串中的一个或多个单词
{ "match": { "content": "hello world" } }
  • range查询:匹配一个数值范围
    • 用于根据范围条件进行查询,例如指定价格在一定区间内的商品

    • 范围符号

      • gte:大于等于

      • gt:大于

      • lte:小于等于

      • lt:小于

{ "range": { "age": { "gte": 20, "lte": 30 } } }
  • 分页查询:指定要跳过的文档数量(from)和需要返回的文档数量(size)
{
  "size::10,
  "from":0,
  "query":{
    "match_all":{}
  }
}
  • 分页结果排序:sort字段进行排序,desc,asc
{
  "sort":{
    "value":"desc,asc"
  }
}
  • bool查询:使用布尔逻辑(与、或、非)进行复杂的查询操作

    • "must"关键字用于指定必须匹配的条件,即所有条件都必须满足

    • "must_not"关键字指定必须不匹配的条件,即所有条件都不能满足

    • "should"关键字指定可选的匹配条件,即至少满足一个条件

{  
  "bool": {  
    "must": [  { "match": { "title": "Elasticsearch" } }],  
    "must_not": [{ "match": { "tag": "old" } }  ],
    "should":[{"match":{"tag":"new"}}]
  }  
}

查询子句实战

创建索引


PUT /mall-shop_dsl
{
  "settings": {
    "number_of_shards": 2,
    "number_of_replicas": 0
  },
  "mappings": {
    "properties": {
      "id": {
        "type": "keyword"
      },
      "title": {
        "type": "keyword"
      },
      "summary": {
        "type": "text"
      },
      "price": {
        "type": "float"
      }
    }
  }
}

插入数据

PUT /mall-shop_dsl/_bulk
{ "index": { "_index": "mall-shop_dsl" } }
{ "id": "1", "title": "Spring Boot","summary":"this is a summary Spring Boot video", "price": 9.99 }
{ "index": { "_index": "mall-shop_dsl" } }
{ "id": "2", "title": "java","summary":"this is a summary java video", "price": 19.99 }
{ "index": { "_index": "mall-shop_dsl" } }
{ "id": "3", "title": "Spring Cloud","summary":"this is a summary Spring Cloud video", "price": 29.99 }
{ "index": { "_index": "mall-shop_dsl" } }
{ "id": "4", "title": "Spring_Boot", "summary":"this is a summary Spring_Boot video","price": 59.99 }
{ "index": { "_index": "mall-shop_dsl" } }
{ "id": "5", "title": "SpringBoot","summary":"this is a summary SpringBoot video", "price": 0.99 }

查询dsl编写

精准查询 term 用于精确匹配一个指定字段的关键词,不进行分词处理
GET /mall-shop_dsl/_search
{
  "query":{
    "term":{
      "title":"Spring Boot"
    }
  }
}

在这里插入图片描述

match查询 用于执行全文搜索,它会将搜索查询与指定字段中的文本进行匹配
GET /mall-shop_dsl/_search
{
  "query":{
    "match": {
      "title": "SpringBoot"
    }
  }
}

在这里插入图片描述

match all查询,查询当前索引下所有数据
GET /mall-shop_dsl/_search
{
  "query":{
    "match_all": {}
  }
}

在这里插入图片描述

有条件查询,match对查询内容进行分词,然后进行查询,多个词条之间是or的关系
GET /mall-shop_dsl/_search
{
  "query":{
    "match": {
      "summary": "spring"
    }
  }
}

在这里插入图片描述

查询多个条件
GET /mall-shop_dsl/_search
{
  "query": {
    "match": {
      "summary": "spring cloud"
    }
  }
}

在这里插入图片描述

查询返回指定资源,source用于返回对应的字段
GET /mall-shop_dsl/_search
{
  "_source": ["title","price"], 
  "query": {
    "term": {
      "title": {
        "value": "java"
      }
    }
  }
}

在这里插入图片描述

range查询,查询价格大于1元小于20的数据
GET /mall-shop_dsl/_search
{
  "query":{
    "range":{
      "price":{
        "gt":1,
        "lt":20
      }
    }
  }
}

在这里插入图片描述

分页查询,查询从0开始的每页2个文档数量的数据

GET /mall-shop_dsl/_search
{
  "size": 2,
  "from": 3,
  "query": {
    "match_all": {}
  }
}

在这里插入图片描述

bool查询,查询价格大于20,且title为java的数据
GET /mall-shop_dsl/_search
{
  "query":{
    "bool": {
      "must": [
        {
          "match": {
          "summary": "Cloud"
          }
        },
        {
          "range": {
            "price": {
              "gt": 20
            }
          }
        }
      ]
    }
  }
}

在这里插入图片描述

Query DSL查询过滤Filter多案例实战

filter查询

  • 对查询结果进行筛选和过滤,返回符合条件的文档。
  • filter查询对结果进行缓存,提高性能查询,用于数字,日期日期,布尔逻辑,存在性检查等操作。
  • term过滤:与term查询类似,但不会影响得分计算
  • range()过滤:与range查询类似,但也不会影响得分计算
  • exists过滤:匹配存在指定字段的文档
  • missing过滤:匹配不存在指定字段的文档
  • 语法格式:
{
  "query": {
    "bool": {
      "filter": {
        // 过滤条件
      }
    }
  }
}

案例一:使用term过滤器查询title为java的数据


GET /mall-shop_dsl/_search
{
  "query": {
    "bool": {
      "filter": [
        {"term": {
          "title": "java"
        }}
      ]
    }
  }
}

在这里插入图片描述

使用range过滤器查询价格price在10-30之间的数据


GET /mall-shop_dsl/_search
{
  "query": {
    "bool": {
      "filter": [
        {"range": {
          "price": {
            "gte": 10,
            "lte": 30
          }
        }}
      ]
    }
  }
}

在这里插入图片描述

match高级用法之多字段匹配和短语搜索实战

  • match高级用法之多字段匹配

    • 多字段搜索匹配

      • 业务查询,需要在多个字段上进行文本搜索,用multi_match

      • 在match的基础上支持多个字段进行文本匹配查询。

      • 语法格式


GET /index/_search
{
  "query": {
    "multi_match": {
      "query": "要搜索的文本",
      "fields": ["字段1", "字段2", ...]
    }
  }
}# query:需要匹配的查询文本。
# fields:一个包含需要进行匹配的字段列表的数组。
- 短语搜索匹配
	- elasticsearch提供的一种高级匹配查询类型,用于执行精确的短语搜索。
	- 相对于match查询,match_phrase会在匹配时考虑单词的顺序和位置
	- 语法格式
GET /index/_search
{
  "query": {
    "match_phrase": {
      "field_name": {
        "query": "要搜索的短语"
      }
    }
  }
}# field_name:要进行匹配的字段名。
# query:要搜索的短语。
  • 创建索引
PUT /product
{
  "settings": {
    "number_of_shards": 2,
    "number_of_replicas": 0
  },
  "mappings": {
    "properties": {
      "product_name": {
        "type": "text"
      },
      "description": {
        "type": "text"
      },
      "category": {
        "type": "keyword"
      }
    }
  }
}

插入数据


POST /product/_bulk
{ "index": { "_index": "product", "_id": "1" } }
{ "product_name": "iPhone 12", "description": "The latest iPhone model from Apple", "category": "electronics" }
{ "index": { "_index": "product", "_id": "2" } }
{ "product_name": "Samsung Galaxy S21", "description": "High-performance Android smartphone", "category": "electronics" }
{ "index": { "_index": "product", "_id": "3" } }
{ "product_name": "MacBook Pro", "description": "Powerful laptop for professionals", "category": "electronics" }
{ "index": { "_index": "product", "_id": "4" } }
{ "product_name": "Harry Potter and the Philosopher's Stone", "description": "Fantasy novel by J.K. Rowling", "category": "books" }
{ "index": { "_index": "product", "_id": "5" } }
{ "product_name": "The Great Gatsby", "description": "Classic novel by F. Scott Fitzgerald", "category": "books" }
  • 在product_name和description字段上执行了一个multi_match,将查询文本设置为"iphone",对这两个字段进行搜索,并返回匹配到的文档,这个是or的关系,会有最佳匹配。
GET /product/_search
{
  "query": {
    "multi_match": {
      "query": "iphone",
      "fields": ["product_name","description"]
    }
  }
}

在这里插入图片描述

使用match_phrase查询在description字段上执行了一个短语搜索将要搜索的短语设置为 “classic novel”。使用match_phrase查询,Elasticsearch将会返回包含 “classic novel” 短语的文档

GET /product/_search
{
  "query": {
    "match_phrase": {
      "description": "classic novel"
    }
  }
}

在这里插入图片描述

日常单词拼写错误-fuzzy模糊查询案例实战

介绍

  • fuzzy查询是Elasticsearch中提供的一种模糊匹配查询类型,用在搜索时容忍一些拼写错误或近似匹配

  • 使用fuzzy查询,可以根据指定的编辑距离(即词之间不同字符的数量)来模糊匹配查询词

  • fuzzy模糊查询是拼写错误的简单解决方案,但具有很高的 CPU 开销和非常低的精准度

  • 参数介绍

    • filed_name:要进行模糊匹配的字段名。

    • value:要搜索的词

    • fuzziness:参数指定了模糊度

      • 0,1,2

        • 指定数字,表示最大编辑距离,较低的数字表示更严格的匹配,较高的数字表示更松散的匹配。

        • fuzziness的值,表示针对某个单词而言,而不是总的错误的数值。

      • auto:elasticsearch根据词的长度自动选择模糊度

        • 如果字符串的长度大于5,那fuzziness的值自动设置为2

        • 如果字符串的长度小于2,那fuzziness的值自动设置为0

松散匹配


GET /product/_search
{
  "query": {
    "fuzzy": {
      "description": {
        "value": "nov",
        "fuzziness": "2"
      }
    }
  }
}

在这里插入图片描述

严格匹配

GET /product/_search
{
  "query": {
    "fuzzy": {
      "description": {
        "value": "nov",
        "fuzziness": "1"
      }
    }
  }
}

在这里插入图片描述

自动检查

GET /product/_search
{
  "query": {
    "fuzzy": {
      "description": {
        "value": "novek",
        "fuzziness": "auto"
      }
    }
  }
}

在这里插入图片描述

DSL搜索高亮显示案例实战

  • 在 ES 中,高亮语法用于在搜索结果中突出显示与查询匹配的关键词

  • 高亮显示是通过标签包裹匹配的文本来实现的,通常是 或其他 HTML 标签

  • 基本用法:在 highlight 里面填写要高亮显示的字段,可以填写多个

  • 在DSL查询语句中添加highlight字段,指定要高亮的字段以及高亮显示的前置和后置标签。

  • 高亮显示通常只适用于全文检索查询(如match、multi_match等),因为这类查询会对文本进行分词处理,从而能够识别出与查询关键词匹配的文本片段。

单条件查询高亮显示(商品名称为iphone)

GET /product/_search
{
  "query": {
    "match": {
      "product_name": "iPhone"
    }
  },
  "highlight": {
    "fields": {
      "product_name": {}
    }
  }
}

在这里插入图片描述

多条件查询(title为iPhone,description中包含iphone的高亮显示)

GET /product/_search
{
  "query": {
    "bool": {
      "should": [
        {"match": {
          "product_name": "iphone"
        }},
        {
          "match": {
            "description": "iphone"
          }
        }
      ]
    }
  },
  "highlight": {
    "fields": {
      "product_name": {},
      "description": {}
    }
  }
}

在这里插入图片描述

多条件查询(title为iPhone,description中包含iphone的高亮显示)修改样式

  • pre_tags:前置标签

  • post_tags:后置标签

  • fields:需要高亮的字段


GET /product/_search
{
  "query": {
    "bool": {
      "should": [
        {"match": {
          "product_name": "iphone"
        }},
        {
          "match": {
            "description": "iphone"
          }
        }
      ]
    }
  },
  "highlight": {
    "pre_tags": "<font color='yellow'>",
    "post_tags": "</font>",
    "fields": {
      "product_name": {},
      "description": {}
    }
  }
}

在这里插入图片描述

通过本实战指南,您已掌握了Elasticsearch Query DSL的核心技能,从基础查询到高级搜索技巧,再到性能优化策略。实践是检验真理的唯一标准,鼓励您动手尝试这些示例,在真实项目中灵活运用这些知识,构建高性能、高灵活性的搜索解决方案。无论是处理海量数据的快速检索,还是构建精准的全文搜索体验,Query DSL都是您不可或缺的工具箱。继续探索Elasticsearch的广阔世界,让数据为您所用,解锁更多业务洞察与价值。

更多精彩内容请关注以下公众号

在这里插入图片描述

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

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

相关文章

【八股系列】探索响应式布局的奥秘:关键技术与实战代码示例

&#x1f389; 博客主页&#xff1a;【剑九 六千里-CSDN博客】 &#x1f3a8; 上一篇文章&#xff1a;【为什么组件中的 data 必须是一个函数&#xff0c;然后 return 一个对象&#xff0c;而 new Vue 实例里&#xff0c;data 可以直接是一个对象&#xff1f;】 &#x1f3a0; …

【python】eval函数

1.eval函数的语法及用法 &#xff08;1&#xff09;语法&#xff1a;eval(expression) 参数说明&#xff1a; expression&#xff1a;必须为字符串表达式&#xff0c;可为算法&#xff0c;也可为input函数等。 说明&#xff1a;表达式必需是字符串&#xff0c;否则会报错&a…

(2024,稀疏高秩适配器(SHiRA),适配器快速切换和多适配器融合,稀疏掩码,稀疏高秩且正交的适配器,移动场景部署)

Sparse High Rank Adapters 公和众与号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 1. 介绍 2. 背景&#xff1a;LoRA 的边缘部署挑战 3. 提议的方法 3.1 稀疏高秩适配器&#xff0…

共享资源,共谋协同发展新机遇

树莓集团在资源共享与协同发展方面取得了显著成效。通过优化资源配置、构建产业服务平台、校企合作育人、推动产业转型升级以及主导产业园运营与建设等举措&#xff0c;树莓集团不仅促进了数字产业的快速发展&#xff0c;也为各数字产业园区和合作企业提供了更多的发展机会和合…

Compiled blocks

目录 一&#xff0c;编译块 Compiled Block 二&#xff0c;编译循环 三&#xff0c;调用编译块 Invoke 四&#xff0c;Tips and notes 一&#xff0c;编译块 Compiled Block 在几何体网络内&#xff0c;可将网络的一部分放入编译块&#xff08;compiled block&#xff09;内…

天润融通:AI赋能客户体验,推动企业收入和业绩增长

“客户体验已经成为全球企业差异化的关键。人工智能与数据分析等创新技术正在加速推动企业在客户体验计划中取得成功&#xff0c;以保持领先地位”。Customer Insights & Analysis 研究经理Craig Simpson说道。 客户体验 (CX&#xff0c;Customer Experience) 是客户在与企…

基于PHP+MySql的留言管理系统的设计与实现

功能概述 网页留言板管理系统&#xff0c;用户层面分为普通用户和管理员&#xff0c;并设权限&#xff08;即后台留言管理系统普通用户不能访问&#xff0c;别人的留言自己不可以修改删除&#xff0c;未登录不能使用留言功能&#xff09;&#xff0c;功能包括用户登录注册、留…

鸿蒙开发HarmonyOS NEXT(一)

最近总听见大家讨论鸿蒙&#xff0c;前端转型的好方向&#xff1f;先入门学习下 目前官方版本和文档持续更新中 一、开发环境 提示&#xff1a;要占用的空间比较多&#xff0c;建议安装在剩余空间多的盘 1、下载&#xff1a;官网最新工具 - 下载中心 - 华为开发者联盟 (huaw…

【Mac】王国保卫战:起源 for mac(塔防策略游戏)游戏介绍和安装教程

游戏介绍 《王国保卫战&#xff1a;起源》&#xff08;Kingdom: Origins&#xff09;是一款策略塔防游戏&#xff0c;其核心玩法融合了塔防、策略管理和资源管理元素。游戏的主要目标是在一个开放的像素化世界中建立和管理自己的王国&#xff0c;并抵御夜晚来袭的怪物入侵。 …

c语言学习记录(十)———函数

文章目录 前言一、函数的基本用法二、函数的参数传递1.基本方式2 数组在函数中的传参 前言 一个学习C语言的小白~ 有问题评论区或私信指出~ 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、函数的基本用法 函数是一个完成特定功能的代码模块&…

使用Dropout大幅优化PyTorch模型,实现图像识别

大家好&#xff0c;在机器学习模型中&#xff0c;如果模型的参数太多&#xff0c;而训练样本又太少&#xff0c;训练出来的模型很容易产生过拟合的现象。在训练神经网络时&#xff0c;过拟合具体表现在模型训练数据损失函数较小&#xff0c;预测准确率较高&#xff0c;但是在测…

gc.log中 CMS-concurrent-abortable-preclean

问题 在gc日志中看到 2024-06-26T16:16:07.5040800: 64690272.666: [CMS-concurrent-abortable-preclean-start]CMS: abort preclean due to time 2024-06-26T16:16:12.5530800: 64690277.716: [CMS-concurrent-abortable-preclean: 1.052/5.049 secs] [Times: user1.33 sys0…

点云处理实战 PCL求解点云表面曲率

目录 一、什么是曲率 二、曲率计算过程 三、pcl 求解点云局部曲率 四、思考?为何曲率计算会使用协方差矩阵? 五、推荐阅读 一、什么是曲率 曲率是几何学中用来描述曲线或曲面形状变化的一个量。它反映了曲线或曲面的弯曲程度。在不同的上下文中,曲率的定义和计算方式有…

C语言 指针——向函数传递字符串

目录 向函数传递字符串 计算实际字符个数 用字符数组编程实现字符串复制 用字符指针编程实现字符串复制 关于程序的效率的几点建议 向函数传递字符串 向函数传递字符串时  既可用 字符数组 作函数参数  也可用 字符指针 作函数参数 Simulating Call by reference &…

第二期书生·浦语大模型实战营优秀项目一览

书生浦语社区于 2023 年年底正式推出了书生浦语大模型实战营系列活动&#xff0c;至今已有两期五批次同学参加大模型学习、实战&#xff0c;线上课程累计学习超过 10 万人次。 实战营特设项目实践环节&#xff0c;提供 A100 算力支持&#xff0c;鼓励学员动手开发。第 2 期实战…

51单片机STC89C52RC——9.1 DS1302涓流充电计时芯片

目录 目的/效果 一&#xff0c;STC单片机模块 二&#xff0c;DS1302计时器 2.1 特性/板子位置 2.1.1 特性 2.1.2 板子上的位置 2.2 针脚定义 2.3 数据传输 2.3.1 读数据 2.3.2 写数据 2.4 BCD码 2.5 可编程涓流充电器 2.6 时钟动态设置 三&#xff0c;创建Keil项目…

算法导论 总结索引 | 第四部分 第十六章:贪心算法

1、求解最优化问题的算法 通常需要经过一系列的步骤&#xff0c;在每个步骤都面临多种选择。对于许多最优化问题&#xff0c;使用动态规划算法求最优解有些杀鸡用牛刀了&#xff0c;可以使用更简单、更高效的算法 贪心算法&#xff08;greedy algorithm&#xff09;就是这样的算…

云服务器部署LNMP Web环境教程合集(多版linux系统安装方法)

LNMP环境包括Linux、Nginx、MySQL和PHP&#xff0c;Nginx是一款小巧而高效的Web服务器软件&#xff0c;使用阿里云服务器搭建LNMP Web网站环境很简单&#xff0c;支持多种LNMP环境部署教程&#xff0c;可使用ROS模板部署、LNMP镜像以及基于不同Linux操作系统手动部署LNMP全流程…

华为仓颉编程语言正式发布!相比Java、Go、Swift优势在哪?附入门教程~

在2024年6月21日举行的华为开发者大会上&#xff0c;华为公司不仅对外宣布了其新一代鸿蒙操作系统HarmonyOS NEXT&#xff0c;还正式发布了他们自主研发的编程语言&#xff0c;名为仓颉。 我们一起看看仓颉编程语言的定位及其优势所在&#xff0c;以及它的入门教程&#x1f4aa…

Scania斯堪尼亚SHL题库综合能力性格测试真题题型解析及面试经验

一、走进Scania斯堪尼亚 Scania是一家成立于1891年的瑞典公司&#xff0c;专注于重型卡车和巴士的制造&#xff0c;以其模块化系统和环保设计闻名。作为全球领先的运输解决方案提供商&#xff0c;Scania不仅提供高质量的车辆&#xff0c;还提供相关服务和融资解决方案。公司秉…