ElasticSearch核心之DSL查询语句实战

在这里插入图片描述

什么是DSL?

Elasticsearch提供丰富且灵活的查询语言叫做DSL查询(Query DSL),它允许你构建更加复杂、强大的查询。 DSL(Domain Specific Language特定领域语言)以JSON请求体的形式出现。目前常用的框架查询方法什么的底层都是构建DSL语句实现的,所以你必须掌握DSL。
例如:

GET book/_search
{"query": {"match": {"name": "活着"}}
}

准备测试数据

请参考我的另一篇文章:https://blog.csdn.net/IndexMan/article/details/140611813
#精确查询
也就是term查询不会分析查询条件,只有当词条和查询字符串完全匹配时才匹配,也就是精确查找,比如数字,日期,布尔值或 not_analyzed 的字符串(未经分析的文本数据类型):
GET /article_doc/_doc/1815982664109314052

  • 请求
{"query": {"term": {"category": "技术"}}
}
  • 响应
{"_index": "article_doc","_type": "_doc","_id": "1815982664109314052","_version": 1,"_seq_no": 4,"_primary_term": 1,"found": true,"_source": {"author": "华为","category": "技术","content": "就在昨天,华为正式官宣自研编程语言 「仓颉」 正式诞生!!!\r\n\r\n华为,作为全球领先的信息与通信技术(ICT)解决方案提供商,以“仓颉”编程语言的诞生,再次引领了技术革新的潮流,为智能时代的软件开发定义了新的艺术。","createTime": "2024-07-24 13:29:41","id": "1815982664109314052","readCount": 1,"title": "华为自研编程语言“仓颉”正式发布"}
}

terms查询:terms 跟 term 有点类似,但 terms 允许指定多个匹配条件。 如果某个字段指定了多个值,那么文档需要一起去 做匹配:

{"query": {"terms": {"category": [ "技术","管理"]}}
}

全文查询

顾名思义,全文查询会分析查询条件,先将查询条件进行分词,然后查询,求并集。

区别于term,match的区别是:match是经过analyer分词器分词的,也就是说,文档首先被分析器给处理了。根据不同的分析器,分析的结果也稍显不同,然后再根据分词结果进行匹配。term则不经过分词,它是直接去倒排索引中查找了精确的值了。

match 查询的主要用法:

  • match_all:查询所有,无条件;太简单不再演示!
  • match:返回所有匹配到的数据
  • match_phrase:短语查询,在match的基础上进一步查询词组,可以指定slop分词间隔。
{"query": {"match_phrase": {"content": {"query": "中国"}}}
}
  • match_phrase_prefix:前缀查询,根据短语中最后一个词组做前缀匹配,可以应用于搜索提示,但注意和max_expanions搭配。
  • multi_match:多字段查询,使用相当的灵活,可以完成match_phrase和match_phrase_prefix的工作。

post /article_doc/_search

  • 请求
{"query": {"match": {"content": "技术"}}
}
  • 响应
{"took": 11,"timed_out": false,"_shards": {"total": 1,"successful": 1,"skipped": 0,"failed": 0},"hits": {"total": {"value": 1,"relation": "eq"},"max_score": 3.3864474,"hits": [{"_index": "article_doc","_type": "_doc","_id": "1815982664109314052","_score": 3.3864474,"_source": {"author": "华为","category": "技术","content": "就在昨天,华为正式官宣自研编程语言 「仓颉」 正式诞生!!!\r\n\r\n华为,作为全球领先的信息与通信技术(ICT)解决方案提供商,以“仓颉”编程语言的诞生,再次引领了技术革新的潮流,为智能时代的软件开发定义了新的艺术。","createTime": "2024-07-24 13:29:41","id": "1815982664109314052","readCount": 1,"title": "华为自研编程语言“仓颉”正式发布"}}]}
}
  • 多字段查询
{"query": {"multi_match": {"query": "中国","fields": ["title","content"]}}
}

排序查询

例如,按照文章阅读数降序排序:

{"query": {"match_all": {}},"sort": [{"readCount": {"order": "desc"}}]
}

范围查询

range 过滤允许我们按照指定范围查找一批数据,范围操作符包含:

  • gt:大于,相当于关系型数据库中的 >
  • gte:大于等于,相当于关系型数据库中的 >=
  • lt:小于,相当于关系型数据库中的 <
  • lte:小于等于,相当于关系型数据库中的 <=

例如,查询文章阅读数大于5的文章列表:

{"query": {"range": {"readCount": {"gt": 5}}}
}

分页查询

{"query": {"match_all": {}},"from": 0,"size": 5
}

高亮查询

{"query": {"match": {"content": "智能"}},"highlight": {"fields": {"content": {"pre_tags": "<b class='key' style='color:red'>","post_tags": "</b>"}}}
}
{"took": 32,"timed_out": false,"_shards": {"total": 1,"successful": 1,"skipped": 0,"failed": 0},"hits": {"total": {"value": 3,"relation": "eq"},"max_score": 1.2924489,"hits": [{"_index": "article_doc","_type": "_doc","_id": "1815982664109314052","_score": 1.2924489,"_source": {"author": "华为","category": "技术","content": "就在昨天,华为正式官宣自研编程语言 「仓颉」 正式诞生!!!\r\n\r\n华为,作为全球领先的信息与通信技术(ICT)解决方案提供商,以“仓颉”编程语言的诞生,再次引领了技术革新的潮流,为智能时代的软件开发定义了新的艺术。","createTime": "2024-07-24 13:29:41","id": "1815982664109314052","readCount": 1,"title": "华为自研编程语言“仓颉”正式发布"},"highlight": {"content": ["华为,作为全球领先的信息与通信技术(ICT)解决方案提供商,以“仓颉”编程语言的诞生,再次引领了技术革新的潮流,为<b class='key' style='color:red'>智能</b>时代的软件开发定义了新的艺术。"]}},{"_index": "article_doc","_type": "_doc","_id": "1815982664180617221","_score": 0.9935417,"_source": {"author": "狸花猫","category": "人工智能","content": "在信息时代,Web 页面成为我们与世界交互的重要窗口。如今,AI 程序的出现,为 Web 页面带来了新的变革。通过在 Web 页面上实现图片识别,我们即将迈入一个更加智能与便捷的时代。它将赋予网页全新的能力,使其能够理解图片的内容,为用户带来前所未有的体验。让我们一同踏上这充满无限可能的探索之旅。\n\n作者:睡着学\n链接:https://juejin.cn/post/7359084330121789452\n来源:稀土掘金\n著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。","createTime": "2024-07-24 13:29:41","id": "1815982664180617221","readCount": 3,"title": "AI 赋能007 jack  Web 页面,图像识别超越想象"},"highlight": {"content": ["通过在 Web 页面上实现图片识别,我们即将迈入一个更加<b class='key' style='color:red'>智能</b>与便捷的时代。它将赋予网页全新的能力,使其能够理解图片的内容,为用户带来前所未有的体验。让我们一同踏上这充满无限可能的探索之旅。"]}},{"_index": "article_doc","_type": "_doc","_id": "1815982664180617220","_score": 0.85687244,"_source": {"author": "kimi","category": "人工智能","content": "今年,随着各大GLM模型的开源和算力的提升,尤其是最近比较火热的月之暗面的Kimi 模型,AI应用场景中的各种智能体如雨后春笋般涌现。许多同学们纷纷表达了加入AI应用的学习和测试的愿望,然而各大模型提供商所提供的API的免费tokens在数量和其他方面都存在着不同的限制,这给我们这些白嫖党带来了一定的不便。今天,在GitHub上,我发现了这个名为kimi-free-api的项目,它为我们学习和测试使用GLM模型提供了极大的便利。\n\n作者:修己xj\n链接:https://juejin.cn/post/7357546247848427558\n来源:稀土掘金\n著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。","createTime": "2024-07-22 13:29:41","id": "1815982664180617220","readCount": 10,"title": "免费使用Kimi的API接口,kimi-free-api真香"},"highlight": {"content": ["今年,随着各大GLM模型的开源和算力的提升,尤其是最近比较火热的月之暗面的Kimi 模型,AI应用场景中的各种<b class='key' style='color:red'>智能</b>体如雨后春笋般涌现。"]}}]}
}

布尔查询

bool 查询可以用来合并多个条件查询结果的布尔逻辑,它包含以下操作符:

  • must:多个查询条件必须完全匹配,相当于关系型数据库中的 且 and
  • should:至少有一个查询条件匹配,相当于关系型数据库中的 或 or
  • must_not: 多个查询条件的相反匹配,相当于关系型数据库中的 非 not
  • filter:过滤满足条件的数据。

range:条件筛选范围,上面讲过了

{"query": {"bool": {"should": [{"match": {"title": "智能"}},{"match": {"content": "智能"}}]}}
}

聚合查询

我们平时在使用Elasticsearch时,更多会用到聚合操作,它类似SQL中的group by操作。ES的聚合查询一定是先查出结果,然后对结果使用聚合函数做处理,常用的操作有:avg:求平均、max:最大值、min:最小值、sum:求和等。

在ES中聚合分为指标聚合和分桶聚合:

  • 指标聚合:指标聚合对一个数据集求最大、最小、和、平均值等
{"query": {"match_all": {}},"aggs": {"avg_read": {"avg": {"field": "readCount"}}},"_source": ["id","readCount"]
}
  • 响应
{"took": 5,"timed_out": false,"_shards": {"total": 1,"successful": 1,"skipped": 0,"failed": 0},"hits": {"total": {"value": 10,"relation": "eq"},"max_score": 1,"hits": [{"_index": "article_doc","_type": "_doc","_id": "1815982662364483586","_score": 1,"_source": {"id": "1815982662364483586","readCount": 0}},{"_index": "article_doc","_type": "_doc","_id": "1815982664109314049","_score": 1,"_source": {"id": "1815982664109314049","readCount": 1}},{"_index": "article_doc","_type": "_doc","_id": "1815982664109314050","_score": 1,"_source": {"id": "1815982664109314050","readCount": 2}},{"_index": "article_doc","_type": "_doc","_id": "1815982664109314052","_score": 1,"_source": {"id": "1815982664109314052","readCount": 1}},{"_index": "article_doc","_type": "_doc","_id": "1815982664109314053","_score": 1,"_source": {"id": "1815982664109314053","readCount": 5}},{"_index": "article_doc","_type": "_doc","_id": "1815982664180617218","_score": 1,"_source": {"id": "1815982664180617218","readCount": 6}},{"_index": "article_doc","_type": "_doc","_id": "1815982664180617219","_score": 1,"_source": {"id": "1815982664180617219","readCount": 0}},{"_index": "article_doc","_type": "_doc","_id": "1815982664180617220","_score": 1,"_source": {"id": "1815982664180617220","readCount": 10}},{"_index": "article_doc","_type": "_doc","_id": "1815982664109314051","_score": 1,"_source": {"id": "1815982664109314051","readCount": 3}},{"_index": "article_doc","_type": "_doc","_id": "1815982664180617221","_score": 1,"_source": {"id": "1815982664180617221","readCount": 3}}]},"aggregations": {"avg_read": {"value": 3.1}}
}
  • 分桶聚合:除了有聚合函数外,还可以对查询出的数据进行分组group by,再在组上进行游标聚合。
{"size": 0,"query": {"match_all": {}},"aggs": {"age_group": {"terms": {"field": "category"}}}
}
  • 响应:
{"took": 208,"timed_out": false,"_shards": {"total": 1,"successful": 1,"skipped": 0,"failed": 0},"hits": {"total": {"value": 10,"relation": "eq"},"max_score": null,"hits": []},"aggregations": {"age_group": {"doc_count_error_upper_bound": 0,"sum_other_doc_count": 0,"buckets": [{"key": "人工智能","doc_count": 3},{"key": "技术","doc_count": 2},{"key": "经济","doc_count": 2},{"key": "生活","doc_count": 1},{"key": "管理","doc_count": 1},{"key": "面试","doc_count": 1}]}}
}

总结

以上就是DSL的核心用法,用到了再看也不迟,单纯记忆很快就会忘记没啥用。

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

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

相关文章

git 学习总结

文章目录 一、 git 基础操作1、工作区2、暂存区3、本地仓库4、远程仓库 二、git 的本质三、分支git 命令总结 作者: baron 一、 git 基础操作 如图所示 git 总共有几个区域 工作区, 暂存区, 本地仓库, 远程仓库. 1、工作区 存放项目代码的地方&#xff0c;他有两种状态 Unm…

2024新版 黑马程序员《C++零基础入门》笔记——第一章24 三元运算符

1.三元运算符 2.代码实践 #include "iostream" using namespace std;int main() {// 表达式? v1 : v2;int num1, num2;cout << "请输入num1的值" << endl;cin >> num1;cout << "请输入num2的值" << endl;cin >…

Flink-CDC解析(第47天)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言1. CDC 概述1.1 什么是CDC&#xff1f;1.2 CDC的实现机制1) 基于主动查询的 CDC&#xff1a;2) 基于事件接收CDC&#xff1a; 前言 本文主要概述了Flink-CDC. …

万界星空科技灯具行业MES系统:点亮生产管理的未来

在快速迭代的灯具行业中&#xff0c;高效、精准的生产管理是企业保持竞争力的关键。万界星空科技推出的灯具行业MES&#xff08;制造执行系统&#xff09;系统&#xff0c;以其强大的功能和完善的管理体系&#xff0c;正成为众多灯具生产企业的首选解决方案。本文将重点介绍万界…

u盘文件删除如何恢复?u盘恢复数据的8个诀窍,新手必看!

随着互联网的普及&#xff0c;u盘已成为人手必备的一个工具&#xff0c;承载着我们许多的重要文件和数据。然而&#xff0c;当意外删除或丢失这些关键数据时&#xff0c;我们常常会感到无助。您是否也曾经面对过u盘文件误删的尴尬吗&#xff1f;亦或者是否曾为如何从u盘中恢复已…

【漏洞复现】phpStudy 小皮 Windows面板 存在RCE漏洞

靶场资料后台自行领取【靶场】 image-20240726092307252 PhpStudy小皮面板曝RCE漏洞&#xff0c;本质是存储型XSS引发。攻击者通过登录用户名输入XSS代码&#xff0c;结合后台计划任务功能&#xff0c;实现远程代码执行&#xff0c;严重威胁服务器安全。建议立即更新至安全版…

Study--Oracle-07-ASM相关参数(四)

一、ASM主要进程 1、ASM主要后台进程 ASM实例除了传统的DBWn、LGWR、CKPT、SMON和PMON等进程还包含如下几个新后台进程: 2、牛人笔记 邦德图文解读ASM架构,超详细 - 墨天轮 二、数据库实例于ASM实例之间的交互关系 数据库实例与ASM实例之间的交互关系涉及多个步骤和过程,…

ICML最佳论文SD3上线公共教程!DreamBench++图像自动评估新基准来了,实现人类偏好深度对齐

近日&#xff0c;ICML 2024 最佳论文公布了&#xff01;其中就包含年度图像生成的「网红模型」——Stable Diffusion 3&#xff08;简称 SD3&#xff09;。SD3 是由 Stability AI 开发的最新文本到图像生成模型&#xff0c;前段时间已经全网开源&#xff01;HyperAI 超神经现已…

【PyCharm】PyCharm 2024.1 的最新变化-代码补全与智能提示

目录 代码补全与智能提示 更智能的代码补全功能 基于机器学习的代码建议 上下文相关的代码片段推荐 全行代码补全支持 (JavaScript 和 TypeScript) 本地 ML 模型的全行补全 示例 示例 1: 基于上下文的代码建议 示例 2: 全行代码补全 详细对比示例 示例 3: 传统代码补…

【iOS】3G share仿写

3G share 前言登录、注册界面首页搜索搜索更换照片折叠cell 文章活动我的 前言 本周进行了3G share的仿写&#xff0c;这个仿写内容较多&#xff0c;用到了很多之前学习的东西&#xff0c;也学习了许多的新知识。 登录、注册界面 这两个界面主要运用属性传值和协议传值&…

5. 开发环境搭建

1. 概述 基于ubuntu20.04搭建开发环境 2. 开发环境安装 恒玄SDK编译&#xff0c;依赖gcc-arm的编译工具&#xff0c;编译工具由恒玄提供&#xff1b; 2.1 配置编译工具链的环境变量 修改~/.profile文件 source ~/.profile 2.2 安装依赖包 sudo apt install ccache sudo a…

YOLO 车辆测速

原文:YOLO 车辆测速 - 知乎 (zhihu.com) 单目测速:多目标追踪 + 单目测距 + 速度公式 原理 目标检测并追踪视频中车辆的车尾(假定摄像头安装在单行道上),根据连续两帧的检测框计算得到像素距离。然后通过预先计算的 ppm (pixel per meter) ——道路不同,其值不同——得…

MyBatis操作数据库 -- 动态SQL

T04BF &#x1f44b;专栏: 算法|JAVA|MySQL|Spring &#x1faf5; 与天斗其乐无穷 文章目录 1. 动态SQL<if>标签<trim>标签<where> 标签<set> 标签<foreach> 标签<include>标签注解方式 1. 动态SQL 动态sql能够实现不同条件下的sql拼接 …

大模型深度神经网络(Deep Neural Network, DNN)

大模型深度神经网络&#xff08;Deep Neural Network, DNN&#xff09;是一种复杂的机器学习模型&#xff0c;其特点在于包含多个隐藏层&#xff0c;从而赋予模型强大的非线性表达能力和对复杂数据模式的学习能力。以下是对大模型DNN的详细介绍&#xff1a; 一、基本概念 深度…

C++初阶:string(字符串)

✨✨所属专栏&#xff1a;C✨✨ ✨✨作者主页&#xff1a;嶔某✨✨ 为什么要学习string类 C语言中&#xff0c;字符串是以\0结尾的一些字符的集合&#xff0c;为了操作方便&#xff0c;C标准库中提供了一些str系列 的库函数&#xff0c;但是这些库函数与字符串是分离开的&#…

贪心算法总结(2)

一、买卖股票的最佳时机 . - 力扣&#xff08;LeetCode&#xff09; class Solution { public:int maxProfit(vector<int>& prices) {int miniINT_MAX;int ret0;for(int&price:prices){//遍历的时候&#xff0c;我们随时去更新最小的值&#xff0c;然后让每一位…

shell脚本学习以及案列练习

&#xff08;一&#xff09;用shell脚本自动化部署安装nginx 首先创建一个目录&#xff0c;用于存放该脚本 mkdir -p /root/shell 然后创建脚本文件 vim /root/shell/install_nginx.sh 再给脚本文件加上执行权限 chmod x /root/shell/install_nginx.sh 然后执行&#xff0c…

新手必备:iPhone新机官网验机流程详解

目录 一、准备工作 二、外包装检查 三、序列号查询 四、开箱验机 五、开机验机 六、功能检测 七、售后服务验证 八、总结 一、准备工作 检查包裹&#xff1a;确保快递包裹完好无损。准备录像设备&#xff1a;使用另一台设备录制整个验机过程&#xff0c;以防日后发生纠…

【JAVA开发笔记】Reids下载、安装、配置-Windows篇(超详细,含Redis可视化管理工具!!!)

目录 1. Redis 简介 2. 下载 Redis 安装包 3. 开启 Redis 服务 4. 配置环境变量 5. Redis 服务注册为系统服务 6. Redis 服务测试和简单使用 7. 下载安装 Redis 管理工具 8. 管理工具连接 Redis 服务器 1. Redis 简介 Redis&#xff08;Remote Dictionary Server&…

基于GitHub page和Hexo主题搭建个人博客(win)

1.安装git git官网下载地址&#xff1a;Git - Downloads (git-scm.com) (1)下载&#xff1a;进入官网&#xff0c;选择对应版本下载&#xff0c;得到.exe文件 (2)安装&#xff1a;打开.exe文件&#xff0c;进行如下操作 (3)安装好后&#xff0c;右击鼠标&#xff0c;点击显示…