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

什么是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.mzph.cn/pingmian/35817.shtml

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

相关文章

数据资产风险管理与合规性:全面识别、科学评估并有效应对数据风险,确保企业数据资产的安全性与合规性,为企业稳健发展提供坚实保障

一、引言 在数字化时代&#xff0c;数据资产已成为企业运营和决策的核心要素。然而&#xff0c;随着数据量的快速增长和技术的不断演进&#xff0c;数据资产面临的风险也日益增多&#xff0c;如数据泄露、数据篡改、数据滥用等。同时&#xff0c;数据保护法律法规的不断完善&a…

文华财经盘立方均线-支撑压力自动画线多空声音预警指标公式源码

文华财经盘立方多空均线-支撑压力自动画线指标公式源码&#xff1a; //MA5:MA(C,5); //MA10:MA(C,10); MA20:MA(C,20),COLORRED; MA60:MA(C,60),COLORGREEN; TY:CLOSE; HD:FILTER(BACKSET(FILTER(REF(TY,10)HHV(TY,2*101),10),101),10); LD:FILTER(BACKSET(FILTER(REF(T…

Java版小程序商城免费搭建-直播商城平台规划及常见营销模式解析

平台概述 1. 平台组成 管理平台&#xff1a;提供全方位的系统设置、数据统计、商家管理、订单管理等后台管理功能。商家端&#xff1a;支持PC端和移动端操作&#xff0c;便于商家进行商品管理、订单处理、营销活动设置等。买家平台&#xff1a;覆盖H5网页、微信公众号、小程序…

基于UDP的网络聊天室(多线程实现收和发消息)

要求&#xff1a;1.有新用户登录&#xff0c;其他在线的用户可以收到登录信息 2.有用户群聊&#xff0c;其他在线的用户可以收到群聊信息 3.有用户退出&#xff0c;其他在线的用户可以收到退出信息 4.服务器可以发送系统信息 效果图&#xff1a; service.c #include <head…

【unity笔记】八、Unity人物动画介绍

一、效果预览 本内容仅介绍为unity场景中的任务添加简单的动画效果。 二、小试牛刀 2.1 插件准备 在unity 中导入人物模型。常使用的免费人物模型和动画模型有Robot Kyle&#xff0c;Unity-Chan! Model&#xff0c;Basic Motions FREE。 其中Robot Kyle仅支持URP渲染。如…

Netdiscover基本使用 - 发现局域网中存活主机

目录 0x00 介绍0x01 常用参数0x02 常用方式1. 主动模式2. 被动模式 0x00 介绍 原理&#xff1a;是一个二层&#xff08;数据链路层&#xff09;的ARP发现工具&#xff0c;执行命令的时候可以通过Wireshark查看是基于arp协议的。在不使用DHCP的无线网络上非常有用。 作用&#…

2024挣大钱的机会来了!入职这一行,也能“一飞冲天”

不知不觉我们已经走过了疫情笼罩的三年。如今&#xff0c;已经全面放开&#xff0c;自12月起核酸检测也将彻底取消&#xff0c;对于我们每个人来说这也将是一场长期的战役。 然而在疫情的常态化下&#xff0c;国民经济也将逐渐恢复。对于我们普通人来说如何抓住机遇&#xff…

南信大尹志聪教授为一作在顶级综合性期刊《Natl. Sci. Rev.》发文:传统梅雨停摆,江南缘何不再多烟雨?

文章简介 论文名称&#xff1a;Traditional Meiyu–Baiu has been suspended by global warming 第一作者及单位&#xff1a;尹志聪(教授|南京信息工程大学大气科学学院) 通讯作者及单位&#xff1a;王会军&#xff08;院士|南京信息工程大学大气科学学院&#xff09; 文章发…

C++基础编程100题-015 OpenJudge-1.3-13 反向输出一个三位数

更多资源请关注纽扣编程微信公众号 http://noi.openjudge.cn/ch0103/13/ 描述 将一个三位数反向输出。 输入 一个三位数n。 输出 反向输出n。 样例输入 100样例输出 001参考程序 #include<bits/stdc.h> using namespace std;int main(){int n;cin>>n;cou…

专业,城市,院校,高考填报志愿的三要素怎么排序?

我认为排序方式可以参考&#xff1a; 城市>学校 同样是计算机专业&#xff0c;不论学校的高低&#xff0c;一线城市更容易接触到时代的前端&#xff0c;有更多学习机会&#xff0c;有更好的文化氛围&#xff0c;同样在就业的时候也更容易接触到企业.... 如果要把专业考虑进…

如何实现系统重装和还原?电脑重装系统的详细介绍(内附系统还原教程)

我们使用电脑办公时&#xff0c;如果出现卡顿、运行缓慢、蓝屏崩溃或病毒感染时&#xff0c;可以通过重装系统的方法来解决。但是电脑系统还原和系统重装都比较麻烦&#xff0c;很多电脑小白跟小编一样&#xff0c;无从下手。 系统重装&#xff1a;重装系统则是将电脑系统完全清…

Docker搭建ELK

docker安装ElasticSearch 创建网络 #这里先创建一个网络&#xff1a;因为我们还需要部署kibana容器、logstash容器&#xff0c;需要让这些容器互联。 docker network create elk-net#查看网络 docker network ls下载ES镜像 #搜索镜像 docker search elasticsearch #下载镜像…

【vue】vue响应式原理

vue响应式原理 vue2的响应式原理 vue2对对象类型的监听是通过Object.defineProperty实现的&#xff0c;给想要实现响应式的数据对象每个属性加上get,set方法&#xff0c;以实现数据劫持的操作。而对数组类型的监听是通过重写数组的方法实现的。 Object.defineProperty的定义…

linux高级编程(进程)(1)

进程&#xff1a; 进程的含义? 进程是一个程序执行的过程&#xff0c;会去分配内存资源&#xff0c;cpu的调度 进程分类&#xff1a; 1、交互式进程 2、批处理进程 shell脚本 3、 守护进程 进程与程序的区别&#xff1a; 1&#xff09;程序是…

onlyoffice官方文档中打开文件示例的相关测试

文档地址&#xff1a;https://api.onlyoffice.com/zh/editors/open 开发环境&#xff1a; 后端&#xff1a;zdppy_api开发的一个文档服务前端&#xff1a;vue3开发的客户端 我们在index.html中&#xff0c;引入了文档服务的js文件&#xff1a; <!doctype html> <h…

SonarQube集成Jenkins平台搭建

SonarQube平台搭建 一、项目搭建的必要条件 SonarQube 8.9.10 previous LTS 依据公司现有服务目前的Jdk版本1.8&#xff0c;需要选择一个适用的长期支持版本&#xff0c;我在这里选用的是SonarQube 8.9.10 previous LTS。下载地址&#xff1a;Download Previous SonarQube Ver…

甲骨文(Oracle)云AI专家级证书免费获取攻略

这次分享的是甲骨文云(Oracle)2024年最新最热门的AI专家级证书&#xff0c;活动截止日期7/31。 考试为闭卷监考形式&#xff0c;但小李哥已经把题库准备好&#xff0c;分享给大家。 甲骨文Oracle☁️云计算凭借其Oracle原生产品(数据库、ERP等)在云计算市场中具有一定地位。目前…

常见图像分割模型介绍:FCN、U-Net、SegNet、Mask R-CNN

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

Node.js全栈指南:浏览器显示一个网页

上一章&#xff0c;我们了解到&#xff0c;如何通过第二章的极简 Web 的例子来演示如何查看官方文档。为什么要把查阅官方文档放在前面的章节说明呢&#xff1f;因为查看文档是一个很重要的能力&#xff0c;就跟查字典一样。 回想一下&#xff0c;我们读小学&#xff0c;初中的…

泰迪智能科技大数据挖掘企业服务平台典型合作案例介绍

泰迪大数据挖掘企业服务平台 是一款通用的、企业级、智能化的数据分析模型构建与数据应用场景设计工具&#xff0c;能够一体化地完成数据集成、模型构建、模型发布&#xff0c;为数据分析、探索、服务流程提供支撑&#xff0c;提供完整的数据探索、多数据源接入、特征处理、模型…