ElasticSearch中关于Nasted嵌套查询的介绍:生动案例,通俗易懂,彻底吸收

题注:随着对ES接触的越来越深入,发现此前了解的ES知识点有点单薄,特此寻来ES知识点汇总成的一个思维导图,全面了解自己掌握了哪些,未掌握哪些。此外,作者斌并没有足够的精力学习ES全部的知识点,只能见缝插针,在工作中遇到陌生的点再去深入了解。
本文则是针对Nested嵌套查询进行一系列的研究和分析

ES知识点汇总—思维导图,点击此链接查看

在这里插入图片描述

1. Nasted查询

起因是作者在工作中看到同事提交的这样一行代码

在这里插入图片描述
才发现自己并不清楚nested的作用,特此补充学习。

1.1 观察查询结果

首先我去看了一下这个索引中存储的数据内容,如下图所示。我们自然一眼看出,_source字段中的内容是存储的数据信息,那么就分析一下里面。
观察event字段,发现该字段是一个数组,数组里面嵌套着match[ ]数组,match数组里面嵌套着rule[ ]数组。这可就有意思了,用这种层层嵌套的设计来储存我们的数据。噢,原来这就是嵌套!

观察结果: executeScanTime字段、fileSimHash字段、detectorPort字段都是只有一层,只有event是嵌套的设计

在这里插入图片描述

1.2 调用查询

  • 查询无嵌套的字段

首先我们来看看,如何查询executeScanTime字段内容:使用term查询该字段内容
在这里插入图片描述
发现可以得到返回结果
在这里插入图片描述

  • 查询有嵌套的字段
    我们来查询一下event字段下的fileName字段:使用term查询
    在这里插入图片描述

惊讶的发现,居然失败了,hits[ ]是空的
在这里插入图片描述

那么就先草率的得出一个结论:普通的方式是无法直接查询嵌套的字段信息

1.3 查询嵌套字段

那有什么办法可以查询到嵌套的字段呢?经过作者本人多次摸索,终于找到一个办法,形如下图,就可以实现查询了,执行后会正确得到查询信息!
在这里插入图片描述

分析一下这个语法,简单的term查询是这样子的。那复合查询该如何写呢
在这里插入图片描述
不知大家是否可以发现出什么规律,这里留个伏笔,大家自己总结一下如何使用,动动脑袋,然后自己也实践一下。后续我会提供详细的总结

1.4 细节补充

我现在希望查询policyId字段,该如何写呢?
在这里插入图片描述
错误的写法
在这里插入图片描述

正确的写法
在这里插入图片描述
写到这里,在kibana 中嵌套查询的介绍就先到这里
休息一下吧!


接下来,我很好奇这种字段嵌套是如何设计出来的。我们都知道,首先得定义索引的映射关系,然后创建索引,再给索引赋值,最后才是数据的查询。

1.5 嵌套字段的映射

GET sdlp_unstructure_file_scan_result_115/_mapping

在这里插入图片描述
可以看到,在event字段和match字段,定义type= nested,就可以实现嵌套设计。不然的话,只能是一层的设计,无法实现层层嵌套的效果

1.6 对应的Java写法

作为开发,当然要知道如何代码实现ES查询,测试用例如下

// 此方式常用
@Test
void TermQuery(){
    // 获取client
    这里默认已经获取
        
    // 1. 准备request (参数为索引名称)
    SearchRequest request = new SearchRequest("indexName");
    
	// 2. 构建DSL语句
    request.source().query(QueryBuilders.nestedQuery("event.match",QueryBuilders.termQuery("event.match.policyId","47"), ScoreMode.None));
    
    // 3. 发送请求
    SearchResponse reponse = client.search(request, RequestOptions.ESFAULT);
    
    // 4. 解析数据,得到_source数据
    SearchHit[] hits = response.getHits().getHits();
    for (SearchHit hit : hits) {
       System.out.println(hit.getSourceAsString());
     }
    
}

1.7 回顾

这时候再来看一下文章最开始我分享的同事提交的代码
在这里插入图片描述
这就很好理解了,should内部使用了term查询,且这个字段是嵌套字段。

1.8 总结

所有的东西,我们都了解了一遍,但是,作者仍感觉Nested的知识点独立于自己对ES的了解。因此查看思维导图,发现原来数据类型这一部分介绍了nested
在这里插入图片描述
也就是说,我们不仅可以定义type = nested, 还可以定义object类型,默认为array类型
在这里插入图片描述

那为什么不使用array类型呢,它也可实现嵌套设计?
原来是因为使用array后,数组的类型必须全部一致,这可就难为人了。可以看到我们的项目中的映射。
event数组中,createFileTime字段是long类型、fileAuthor是keyword类型,因此只能选择nested类型了。

接着继续看思维导图,可以发现,nested嵌套查询不属于复合查询,聚合查询,而是属于特定查询中的父子文档检索。

在这里插入图片描述
非常不错,直到这里,我们才算是真正掌握吸收了nested的知识点,快去和同事同学分享吧

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

uniapp vue2、vue3 页面模板代码块设置

本文分享 uniapp vue2、vue3 页面模板代码块设置 设置路径 HBuilder X -> 工具 -> 代码块设置 -> vue代码块 -> 自定义代码块 如上图操作后在打开的 vue.json 文件的右侧“自定义代码块”中复制如下代码(可全选替换也可添加到代码中) 示…

HarmonyOS 音频开发指导:使用 OpenSL ES 开发音频播放功能

OpenSL ES 全称为 Open Sound Library for Embedded Systems,是一个嵌入式、跨平台、免费的音频处理库。为嵌入式移动多媒体设备上的应用开发者提供标准化、高性能、低延迟的 API。HarmonyOS 的 Native API 基于Khronos Group开发的OpenSL ES 1.0.1 API 规范实现&am…

buuctf_练[CISCN2019 华东南赛区]Web4

[CISCN2019 华东南赛区]Web4 文章目录 [CISCN2019 华东南赛区]Web4掌握知识解题思路代码分析正式解题 关键paylaod 掌握知识 ​ 根据url地址传参结构来判断php后端还是python后端;uuid.getnode()函数的了解,可以返回主机MAC地址十六进制;pyt…

记录锁,间隙锁,临键锁还在傻傻分不清楚?一招教你直达行级锁本质

引入记录锁,间隙锁,临键锁的目的是为了干嘛?是为了解决幻读问题,也就是防止一个事务A在查询的时候,另一个事务B在它查询的区间内插入,删除,修改数据,导致事务A前后查询到的行数不一致…

vue+golang上传微信头像

<button class"avatar" open-type"chooseAvatar" chooseavatar"onChooseAvatar"><image :src"avatarUrl" class"avatar-img"></image></button> // 微信头像修改onChooseAvatar(e) {this.uploadFil…

有用过成绩查询系统的老师吗?

是不是有时候觉得手动查询成绩是一件超级繁琐的事情&#xff1f;有了这个成绩查询系统&#xff0c;你就可以告别手动时代啦&#xff01; 先来了解一下什么是成绩查询系统。成绩查询系统是一种可以自动查询学生成绩的系统。通过这个系统&#xff0c;学生可以输入自己的学号或姓名…

【软件教程】如何用C++检查TCP或UDP端口是否被占用

一、检查步骤 使用socket函数创建socket_fd套接字。使用sockaddr_in结构体配置协议和端口号。使用bind函数尝试与端口进行绑定&#xff0c;成功返回0表示未被占用&#xff0c;失败返回-1表示已被占用。 二、CODE 其中port需要修改为想要检测的端口号&#xff0c;也可以将代码…

单元测试到底是什么?应该怎么做?

一、什么是单元测试&#xff1f; 单元测试&#xff08;unit testing&#xff09;&#xff0c;是指对软件中的最小可测试单元进行检查和验证。至于“单元”的大小或范围&#xff0c;并没有一个明确的标准&#xff0c;“单元”可以是一个函数、方法、类、功能模块或者子系统。 …

ios ipa包上传需要什么工具

​ 目录 前言 一、IPA包的原理 二、IPA包上传的步骤 2.apk软件制作工具创建应用程序 3.构建应用程序 4.生成证书和配置文件 5.打包IPA包 6.上传IPA包 三、总结 前言 iOS IPA包是iOS应用程序的安装包&#xff0c;可以通过iTunes或者其他第三方应用商店安装到iOS设备上。…

手把手教你安装配置『Oracle Database 19c』

前言 本文将会讲解如何在 Windows 系统上安装 Oracle Database 19c 数据库&#xff0c;适合初学者学习 Oracle 快速入门和实践练习&#xff0c;比较方便快捷 官方安装文档&#xff1a;Preinstallation Considerations for Installing Oracle Database 对于企业级的数据库&am…

网络协议--UDP:用户数据报协议

11.1 引言 UDP是一个简单的面向数据报的运输层协议&#xff1a;进程的每个输出操作都正好产生一个UDP数据报&#xff0c;并组装成一份待发送的IP数据报。这与面向流字符的协议不同&#xff0c;如TCP&#xff0c;应用程序产生的全体数据与真正发送的单个IP数据报可能没有什么联…

提高数据研究效率,优化成果分享及复用|ModelWhale 版本更新

秋高气爽、金桂飘香&#xff0c;十月末&#xff0c;我们又迎来了 ModelWhale 新一轮的版本更新。 本次更新中&#xff0c;ModelWhale 主要进行了以下功能迭代&#xff1a; 新增 添加模型服务到知识库&#xff08;专业版✓ 团队版✓&#xff09; 新增 自动生成数据引用信息&am…

结构伪类选择器

伪类选择器&#xff1a;用来描述一个元素的特殊状态&#xff01;比如第一个元素、某个元素的子元素、鼠标点击的元素 1 first-child/last-child /*ul的第一个子元素*/ ul li:first-child{ background: #0f35ad; } /*ul的最后一个子元素*/ ul li:last-child{ background: #0f3…

C#两个表多条件关联写法

文章目录 C#两个表多条件关联写法两个表实体类准备实体类数据初始化第一种 sql的左关联第二种相当于sql的 INNER JOIN写法一&#xff1a;FROM a FROM b where 多条件关联写法二&#xff1a; FROM JOIN INTO写法三&#xff1a; FROM JOIN 省略into C#两个表多条件关联写法 两个…

Could not update Flowable database schema: unknown version from database:

文章目录 一、出现问题的情况二、解决方法1、 act_ge_property这个表里面的版本改成flowable-engine的版本号2、act_id_property表的schema.version版本也改成和flowable-engine版本一致&#xff08;如图所示&#xff09; 一、出现问题的情况 项目集成flowable流程框架的时候&…

【EI会议征稿通知】第二届材料科学与智能制造国际学术会议(MSIM 2024)

第二届材料科学与智能制造国际学术会议&#xff08;MSIM 2024&#xff09; 2024 2nd International Conference on Materials Science and Intelligent Manufacturing 2024年第二届材料科学与智能制造国际学术会议 &#xff08;MSIM2024&#xff09;将于2024年1月19日至21日在…

pycharm远程连接Linux服务器

文章目录 一&#xff1a;说明二&#xff1a;系统三&#xff1a;实现远程连接方式一&#xff1a; 直接连接服务器不使用服务器的虚拟环境步骤一&#xff1a;找到配置服务器的地方步骤二&#xff1a;进行连接配置步骤三&#xff1a;进行项目文件映射操作步骤四&#xff1a;让文件…

C#中Redis使用简单教程

C#开发者的Redis入门指南 Redis是一个高性能的内存数据库&#xff0c;常用于缓存、队列、实时数据分析等场景。作为一个C#开发者&#xff0c;了解如何使用Redis可以为你的应用程序带来巨大的好处。本文将向你介绍Redis基本概念&#xff0c;并提供一些C#的代码示例来帮助你入门…

QT图形视图框架绘制曲线图和Smith图

QT图形视图框架绘制曲线图和Smith图 QGraphicsView是Qt框架中的一个图形视图部件&#xff0c;用于显示和处理2D图形元素。它提供了强大的工具来创建交互式和自定义的图形应用程序。在绘制折线图和Smith图时&#xff0c;使用QGraphicsView有以下一些优点&#xff1a; 交互性&am…

大语言模型助力审计问题自动定性

国家审计作为以权力监督制约权力的一项制度安排&#xff0c;是党和国家监督体系的重要组成部分&#xff0c;是国家治理大系统中一个内生的具有预防、揭示和抵御功能的“免疫系统”&#xff0c;是国家治理的基石和重要保障&#xff0c;在推进“全面建成小康社会、全面深化改革、…