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

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

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

相关文章

运行报错(三)git bash报错fatal: detected dubious ownership in repository at

报错现象 在运行git 命令时,出现报错 “fatal: detected dubious ownership in repository at” 报错原因 文件夹的所有者和现在的用户不一致 栗子: 文件夹的所有者是root,而当前用户是admin 解决方案 方法一、 将文件夹的所有者替换成ad…

网络原理之UDP协议

文章目录 前言应用层协议常见的几种数据格式1. xml2. JSON3. protobuffer 端口号传输层UDP 报文协议格式源端口号和目的端口号UDP 长度校验和 前言 前面我们学习了如何使用 UDP 数据报 和 TCP 流实现网络编程一个回显服务器,在知道了 UDP 和 TCP 协议的基本原理之后…

Unity性能优化一本通

文章目录 关于Unity性能优化一、资源部分:1、图片1.1、 图片尺寸越小越好1.2、使用2N次幂大小1.3、取消勾选Read/Write Enabled1.4、图片压缩1.5、禁用多余的Mip Map1.6、合并图集 2、模型2.1.限制模型面数2.2.限制贴图的大小2.3.禁用Read/Write Enables2.4.不勾选其…

行情分析——加密货币市场大盘走势(10.25)

目前大饼继续上涨,还没有看到震荡盘整的迹象。从MACD日线来看,连续绿色实心柱已经10天。现在有点上涨无力了,而现在入场做空性价比更高,看反弹到33000-32000。如果谨慎点,可以继续等待。 以太目前来看和大饼一样那个也…

深度学习使用Keras进行迁移学习提升网络性能

上一篇文章我们用自己定义的模型来解决了二分类问题,在20个回合的训练之后得到了大约74%的准确率,一方面是我们的epoch太小的原因,另外一方面也是由于模型太简单,结构简单,故而不能做太复杂的事情,那么怎么提升预测的准确率了?一个有效的方法就是迁移学习。 迁移学习其…

LeetCode88——合并两个有序数组

LeetCode88——合并两个有序数组 1.题目描述: 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减…

关于c语言,你必须了解的运行流程

流程图 1.程序的翻译环境和执行环境 在ANSIC任何一种实现下,都存在两种环境,程序的翻译环境和执行环境 翻译环境:将源代码转换成机器指令 执行环境:用于执行代码 2.详解编译链接 简单的说一个代码从编写到看到控制台的结果分为编译链接两步即可,接下来我们将详细解释编译链接中…

FoLR:Focus on Local Regions for Query-based Object Detection论文学习笔记

论文地址:https://arxiv.org/abs/2310.06470 自从DETR问询式检测器首次亮相以来,基于查询的方法在目标检测中引起了广泛关注。然而,这些方法面临着收敛速度慢和性能亚优等挑战。值得注意的是,在目标检测中,自注意力机制…

Java8实战-总结44

Java8实战-总结44 CompletableFuture:组合式异步编程Future 接口Future 接口的局限性使用 CompletableFuture 构建异步应用 CompletableFuture:组合式异步编程 最近这些年,两种趋势不断地推动我们反思我们设计软件的方式。第一种趋势和应用运…

微信小程序设计之主体文件app-wxss/less

一、新建一个项目 首先,下载微信小程序开发工具,具体下载方式可以参考文章《微信小程序开发者工具下载》。 然后,注册小程序账号,具体注册方法,可以参考文章《微信小程序个人账号申请和配置详细教程》。 在得到了测…

STM32F4X之中断二

一、外部中断 外部中断:外部中断的中断是相对于外部中断控制器(EXTI)来说,如下图所示: EXTI掌管着23根中断线,具体分布图下: 16根连接GPIO口,如下图: 所有的0口连接到中…

餐饮外卖小程序商城的作用是什么

随着互联网及线上餐饮的发展趋势,行业洗牌正在加速,并且对餐饮连锁门店提出更高要求,餐饮数字化转型加快,积极发展线上经营是不少餐饮商家的首选。这其中,餐饮外卖商城成为很多餐饮品牌的线上经营品牌,也是…

VR全景应用广泛体现在哪里?有何优势?

VR全景作为一种新型营销方式,正在逐渐走进人们的视线,它区别于以往单一角度的照片和视频,VR全景制作显得更加直观、更加真实、更加生动。VR全景通过VR技术将所拍摄的图片变成720度可观看的场景模式,把产品的特色以及魅力整体呈现展…

对长度为n的顺序表L,编写一个时间复杂度为O(n),空间复杂度为O(1)的算法,该算法删除线性表中的所有值为x的数据元素

对长度为n的顺序表L,编写一个时间复杂度为O(n),空间复杂度为O(1)的算法,该算法删除线性表中的所有值为x的数据元素 算法思路: 用count标记遇到x的次数,每次遇到x,count 遇到非x的元素,把它前移…

vue3后台管理系统之顶部tabbar组件搭建

1.1静态页面搭建 <template><div class"tabbar"><div class"tabbar_left"><!-- 面包屑 --><Breadcrumb /></div><div class"tabbar_right"><!-- 设置 --><Setting /></div></di…

自动驾驶的未来展望和挑战

自动驾驶技术是一项引人瞩目的创新&#xff0c;将在未来交通领域产生深远影响。然而&#xff0c;随着技术的不断演进&#xff0c;自动驾驶也面临着一系列挑战和障碍。本文将探讨自动驾驶的未来发展方向、技术面临的挑战&#xff0c;以及自动驾驶对社会和环境的潜在影响。 自动驾…

封装一个vue3 Toast组件,支持组件和api调用

先来看一段代码 components/toast/index.vue <template><div v-if"isShow" class"toast">{{msg}}</div> </template><script setup> import { ref, watch } from vue const props defineProps({show: {type: Boolean,def…

JVM 类的加载子系统

文章目录 类的加载过程加载阶段链接阶段初始化 类的加载器测试代码中获取对应的加载器获取加载器加载的路径不同类对应的加载器自定义加载器自定义加载器的方式 获取类的加载器的方式双亲委派机制双亲委派机制的好处 Java 的 SPI 机制1. 接口定义2. 具体实现3. 配置 META-INF/s…

Spring Cloud Gateway 路由构建器的源码分析

Spring Cloud Gateway 路由构建器的源码分析 文章目录 1. 路由构建器的入口2. 创建路由规则3. 设置路由规则和属性4. 路由过滤器的设置5. 构建和获取路由规则&#xff1a;6. 实例化路由构建器&#xff1a;8. 路由构建器的源码分析8.1 RouteLocator接口8.2 RouteLocatorBuilder…

springBoot与Vue共同搭建webSocket环境

欢迎使用Markdown编辑器 你好&#xff01; 这片文章将教会你从后端springCloud到前端VueEleementAdmin如何搭建Websocket 前端 1. 创建websocket的配置文件在utils文件夹下websocket.js // 暴露自定义websocket对象 export const socket {// 后台请求路径url: ,websocketCo…