当前位置: 首页 > news >正文

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的知识点,快去和同事同学分享吧

相关文章:

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

题注:随着对ES接触的越来越深入,发现此前了解的ES知识点有点单薄,特此寻来ES知识点汇总成的一个思维导图,全面了解自己掌握了哪些,未掌握哪些。此外,作者斌并没有足够的精力学习ES全部的知识点,…...

系列二、Spring的优缺点是什么

一、Spring的优缺点是什么 1.1、优点 集中管理对象,降低对象和对象之间的耦合性,方便维护对象;在不修改代码的情况下可以对业务代码进行增强,减少重复代码,提高开发效率,方便维护;提高开发效率…...

ESP32网络开发实例-HTTP-GET请求

HTTP-GET请求 文章目录 HTTP-GET请求1、HTTP GET请求2、软件准备3、硬件准备4、代码实现4.1 向OpenWeatherMap请求天气数据4.2 ThingSpeak 中的 ESP32 HTTP GET(更新值)在本文中,我们将介绍如使用ESP32向 ThingSpeak 和 openweathermap.org 等常用 API 发出 HTTP GET 请求。…...

PHP:json_encode和json_decode用法

json_encode 函数用于将 PHP 数据结构转换为 JSON 字符串。json_decode 函数用于将 JSON 字符串转换为 PHP 数据结构。 // 将 PHP 数据结构转换为 JSON 字符串 $data ["name" > "John","age" > 25,"city" > "New York&…...

Kafka-Java二:Spring配置kafka消息发送端的缓冲区

一、涉及到的组件概念 1.1、缓冲区 1.2、本地线程 1.3.本地线程消息推送策略 二、各组件的解释参见代码注释 // 配置消息的缓冲区/** 设置消息发送者端的缓冲区大小,如果设置了缓冲区,消息会先发送到缓冲区,可以提供发送性能* 默认大小是32…...

【ArcGIS模型构建器】05:批量为多个矢量数据添加相同的字段

本文实现借助arcgis模型构建器,实现批量为多个土地利用矢量数据添加相同的字段,例如DLMC,DLTB等。 文章目录 问题分析模型构建问题分析 有多个土地利用数据矢量图层,每个图层中有很多个图斑,现在需要给每个图层添加一个或者多个字段,如DLCM,DLBM等。 属性表如下所示: …...

坤坤的悲伤生活

描述 坤坤,这几个月来都非常悲伤,因为自己事发了,有一些问题找上了门,这个时候,有个人进献了一个阿拉丁神灯,有个灯神能够解决掉这个问题,但是有前提,必须回答出它的问题&#xff0c…...

职业技术认证:《研发效能(DevOps)工程师》——开启职业发展新篇章

在互联网行业中,资质认证可以证明在该领域内的专业能力和知识水平。各种技术水平认证也是层出不穷,而考取具有公信力和权威性的认证是从业者的首选。同时,随着国内企业技术实力的提升和国家对于自主可控的重视程度不断提高,国产证…...

gin 框架出现runtime error: index out of range [0] with length 0

之前是这样的: category : c.Request.Form["type"][0] 加上这一句就变成了 fmt.Println(c.Request.FormFile("type")) category : c.Request.Form["type"][0]...

【高阶数据结构】B树

目录 1.B树 2.B树和B树的不同 3.B*树 B树较于哈希红黑树的优势:外查找:读取磁盘数据 ; B树的高度更低,对磁盘的进行I/O操作的次数更少(磁盘的性能比内存差得多); 1.B树 1.1.B树的概念&am…...

Android-Framework 应用间跳转时,提供 Android Broadcast 通知

一、环境 高通865 Android 10 二、情景 应用跳转时,通过广播发送源app的包名和目标app的包名 三、代码实现 frameworks/base/services/core/java/com/android/server/wm/ActivityStarter.java -132,6 132,14 import java.io.PrintWriter;import java.text.DateFormat;imp…...

【Javascript】函数返回值的作用

目录 返回值 中断函数 只能写在函数体里面 返回值 function a(){var b3;return b3? 4:5;} console.log(a()); 创建一个函数,给b赋值3, return b3? 4:5; 判断b是不是等于3,如果是就返回4, 如果不是就返回5 中断函数…...

蓝桥杯 Java k倍区间

前缀和的一个神奇算法,这道题暴力是遍历前缀和的差,也就是遍历所有区间和看他是不是能不能正好除尽k 这道题的技巧是将所有前缀和和k求余 按照求余的结果放在一个数组中 那么余数为0的前缀和a一定满足要求([0,a]) 余数相同的两两…...

万宾科技亮相2023中国传感器与应用技术大会,创始人CEO发表演讲

10月25日-26日,由厦门市工业和信息化局指导;中国传感器与物联网产业联盟、厦门火炬高技术产业开发区管理委员会主办的2023中国(厦门)传感器与应用技术大会暨展览会在厦门召开。本次展会聚焦传感器与储能、物联网、海洋、智慧生活、城市安全与基础设施的融合&#xf…...

#力扣:LCP 06. 拿硬币@FDDL

LCP 06. 拿硬币 - 力扣&#xff08;LeetCode&#xff09; 一、Java class Solution {public int minCount(int[] coins) {int ans0;for(int i0;i<coins.length;i)ans(coins[i]1)/2;return ans;} }...

【Node.js】暴露自定义响应头和预检请求的时机

1. 暴露自定义响应头 // server.js app.post(/api/user/hello, (req, res) > {res.setHeader(Access-Control-Allow-Origin, *)// 权限设置&#xff08;如果有个多&#xff0c;用 &#xff0c;隔开&#xff09;&#xff0c;暴露给前端res.setHeader(Access-Control-expose-…...

包管理工具与配置文件package.json

1&#xff0c;了解工程化管理核心 1.1 nodejs 理解&#xff1a; 在前端工程化发展中&#xff0c;nodejs的出现让前端开始了工程化&#xff0c;结束了仅静态页和切图的工作。他为前端提供了一个运行环境&#xff0c;让前端彻底变成了一个单独的工程&#xff0c;可以运行、编译…...

uni-app:解决异步请求返回值问题

可以使用 Promise 或者回调函数来处理异步请求的返回值。 方法一&#xff1a; Promise处理异步请求的返回值 使用 Promise 可以将异步请求的结果通过 resolve 和 reject 返回&#xff0c;然后通过 .then() 方法获取成功的结果&#xff0c;通过 .catch() 方法获取错误信息。 …...

<多线程章节七>wait() 和 notify()

&#x1f490;专栏导读 本篇文章收录于多线程&#xff0c;也欢迎翻阅博主的其他文章&#xff0c;可能也会让你有不一样的收获&#x1f604; &#x1f342;JavaSE &#x1f337;多线程 &#x1f33c;数据结构 文章目录 &#x1f490;专栏导读&#x1f490;wait()&#x1f490;no…...

竹云产品入选《2023年度上海市网络安全产业创新攻关成果目录》

为推进网络安全产业发展&#xff0c;建设网络安全产业创新高地&#xff0c;上海市经济和信息化委员会于10月24日正式发布《2023年度上海市网络安全产业创新攻关成果目录》&#xff0c;共评选出16项创新成果&#xff0c;其中包括基础技术创新8项、应用技术创新4项、服务业态创新…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

腾讯云V3签名

想要接入腾讯云的Api&#xff0c;必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口&#xff0c;但总是卡在签名这一步&#xff0c;最后放弃选择SDK&#xff0c;这次终于自己代码实现。 可能腾讯云翻新了接口文档&#xff0c;现在阅读起来&#xff0c;清晰了很多&…...

android RelativeLayout布局

<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...

【无标题】湖北理元理律师事务所:债务优化中的生活保障与法律平衡之道

文/法律实务观察组 在债务重组领域&#xff0c;专业机构的核心价值不仅在于减轻债务数字&#xff0c;更在于帮助债务人在履行义务的同时维持基本生活尊严。湖北理元理律师事务所的服务实践表明&#xff0c;合法债务优化需同步实现三重平衡&#xff1a; 法律刚性&#xff08;债…...