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

这篇具有很好参考价值的文章主要介绍了ElasticSearch中关于Nasted嵌套查询的介绍:生动案例,通俗易懂,彻底吸收。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

nestedquery作用,ElasticSearch框架学习,1024程序员节,es,elasticsearch,Kibana,nested,嵌套查询,Java

1. Nasted查询

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

nestedquery作用,ElasticSearch框架学习,1024程序员节,es,elasticsearch,Kibana,nested,嵌套查询,Java
才发现自己并不清楚nested的作用,特此补充学习。

1.1 观察查询结果

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

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

nestedquery作用,ElasticSearch框架学习,1024程序员节,es,elasticsearch,Kibana,nested,嵌套查询,Java

1.2 调用查询

  • 查询无嵌套的字段

首先我们来看看,如何查询executeScanTime字段内容:使用term查询该字段内容
nestedquery作用,ElasticSearch框架学习,1024程序员节,es,elasticsearch,Kibana,nested,嵌套查询,Java
发现可以得到返回结果
nestedquery作用,ElasticSearch框架学习,1024程序员节,es,elasticsearch,Kibana,nested,嵌套查询,Java

  • 查询有嵌套的字段
    我们来查询一下event字段下的fileName字段:使用term查询
    nestedquery作用,ElasticSearch框架学习,1024程序员节,es,elasticsearch,Kibana,nested,嵌套查询,Java

惊讶的发现,居然失败了,hits[ ]是空的
nestedquery作用,ElasticSearch框架学习,1024程序员节,es,elasticsearch,Kibana,nested,嵌套查询,Java

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

1.3 查询嵌套字段

那有什么办法可以查询到嵌套的字段呢?经过作者本人多次摸索,终于找到一个办法,形如下图,就可以实现查询了,执行后会正确得到查询信息!
nestedquery作用,ElasticSearch框架学习,1024程序员节,es,elasticsearch,Kibana,nested,嵌套查询,Java

分析一下这个语法,简单的term查询是这样子的。那复合查询该如何写呢
nestedquery作用,ElasticSearch框架学习,1024程序员节,es,elasticsearch,Kibana,nested,嵌套查询,Java
不知大家是否可以发现出什么规律,这里留个伏笔,大家自己总结一下如何使用,动动脑袋,然后自己也实践一下。后续我会提供详细的总结

1.4 细节补充

我现在希望查询policyId字段,该如何写呢?
nestedquery作用,ElasticSearch框架学习,1024程序员节,es,elasticsearch,Kibana,nested,嵌套查询,Java
错误的写法
nestedquery作用,ElasticSearch框架学习,1024程序员节,es,elasticsearch,Kibana,nested,嵌套查询,Java

正确的写法
nestedquery作用,ElasticSearch框架学习,1024程序员节,es,elasticsearch,Kibana,nested,嵌套查询,Java
写到这里,在kibana 中嵌套查询的介绍就先到这里
休息一下吧!


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

1.5 嵌套字段的映射

GET sdlp_unstructure_file_scan_result_115/_mapping

nestedquery作用,ElasticSearch框架学习,1024程序员节,es,elasticsearch,Kibana,nested,嵌套查询,Java
可以看到,在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 回顾

这时候再来看一下文章最开始我分享的同事提交的代码
nestedquery作用,ElasticSearch框架学习,1024程序员节,es,elasticsearch,Kibana,nested,嵌套查询,Java
这就很好理解了,should内部使用了term查询,且这个字段是嵌套字段。

1.8 总结

所有的东西,我们都了解了一遍,但是,作者仍感觉Nested的知识点独立于自己对ES的了解。因此查看思维导图,发现原来数据类型这一部分介绍了nested
nestedquery作用,ElasticSearch框架学习,1024程序员节,es,elasticsearch,Kibana,nested,嵌套查询,Java
也就是说,我们不仅可以定义type = nested, 还可以定义object类型,默认为array类型
nestedquery作用,ElasticSearch框架学习,1024程序员节,es,elasticsearch,Kibana,nested,嵌套查询,Java

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

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

nestedquery作用,ElasticSearch框架学习,1024程序员节,es,elasticsearch,Kibana,nested,嵌套查询,Java
非常不错,直到这里,我们才算是真正掌握吸收了nested的知识点,快去和同事同学分享吧文章来源地址https://www.toymoban.com/news/detail-780103.html

到了这里,关于ElasticSearch中关于Nasted嵌套查询的介绍:生动案例,通俗易懂,彻底吸收的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Elasticsearch 基本使用(二)简单查询 & 嵌套查询

    按id查询单条记录 查询所有数据 默认只查询10条记录 设置分页条件 设置排序 两种设置方式 注意:_id 为字符串,其排序方式为按位比较,并非数值大小 filter 过滤 在 bool 查询内,可以使用 filter 对数据进行过滤。 单从最终数据来看,filter 也是用于过滤数据,用于条件查询。

    2024年02月03日
    浏览(35)
  • Elasticsearch嵌套查询must和mustNot

    场景:在bug关联固件的时候将bug的数据放到固件的数据下,可以根据固件数据下是否包含bug数据查询出已关联和未关联的数据。 ES文档结构 目录 1.must查询此bug关联的固件 java代码 2.mustNot查询此bug未关联的固件 java代码 3.劫后余生        4.闲来无事must_not跟must下的多条件关

    2024年02月07日
    浏览(38)
  • Elasticsearch多层嵌套nested查询和多条件聚合aggregations

     当在aggregations中使用嵌套多条件,需要用bool包起来,如果直接在filters[]里写,将会分多个桶,分别按单个条件统计;  部分片段截取: 当需要将多层嵌套nested用多个条件AND起来时: 全部片段: Elasticsearch 多层嵌套nested 多条件聚合aggregations

    2024年02月16日
    浏览(46)
  • [] ElasticSearch集群故障案例分析: 警惕通配符查询

    [携程旅行网: 吴晓刚]  许多有RDBMS/SQL背景的开发者,在初次踏入ElasticSearch世界的时候,很容易就想到使用(Wildcard Query)来实现模糊查询(比如用户输入补全),因为这是和SQL里like操作最相似的查询方式,用起来感觉非常舒适。然而近期我们线上一个搜索集群的故障揭示了,滥

    2024年02月07日
    浏览(43)
  • SpringBoot 实现 elasticsearch 查询操作(RestHighLevelClient 的案例实战)

    上一节讲述了 SpringBoot 实现 elasticsearch 索引操作,这一章节讲述 SpringBoot 实现 elasticsearch 查询操作。 案例用到的索引库结构

    2024年02月11日
    浏览(45)
  • 生动的SDN基础内容介绍(三)--Ryu控制器

    之前介绍完了南向协议OpenFlow,这次说一说Ryu。因为毕设的时候师兄推荐了Ryu,再考虑到Python方便开发,我也就继续用Ryu了。但是后续发现好像支持Ryu开发的框架相较Floodlight、OpenDaylight、ONOS没那么多(但也可能只是我没找到)。 首先非常强烈推荐这位大哥的博客: https://w

    2023年04月15日
    浏览(42)
  • Elasticsearch查询文档--常见API篇(附详细代码和案例图文)

    前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇文章将介绍Elasticsearch在Java中的几种API的使用,这块内容不作为面试中的重点。 如果文章有什么需要改进的地方还请大佬不吝赐教 👏👏。 小威在此先感谢各位大佬啦~~🤞🤞 🏠个人主页:小威要向诸佬学

    2023年04月11日
    浏览(48)
  • Elasticsearch Boolean Query查询介绍

    前言 ES 和 Solr 的底层都是基于Apache Lucene 实现,bool 查询的底层实现是Lucene 的 BooleanQuery,其可以组合多个子句查询,类似 SQL 语句里面的 OR 查询。 查询介绍 在 ES 里面 Boolean 查询封装了 4 种 API 接口能力,可以单独使用,也可以组合使用,总结如下: 函数 描述 must query 关键

    2024年02月13日
    浏览(46)
  • 【Elasticsearch系列】5分钟掌握查询原理-lucece查询逻辑介绍

    🎬作者简介:大家好,我是蓝胖子🥇 ☁️博客首页:CSDN主页蓝胖子的编程梦 🌄每日一句:既然选择了追求,就不要哭泣。坚持一下,扛过今天,幸福就更近一步 大家好,我是蓝胖子,最近在做一些elasticsearch 慢查询优化的事情,通常用分析elasticsearch 慢查询的时候可以通

    2024年02月22日
    浏览(41)
  • 【ElasticSearch】 ElasticSearch serverless架构介绍(查询写入分离,计算存储分离)

    ElasticSearch 推出了全新的serverless架构,将查询(search)和写入(indexing)分离,将计算(computing)和存储(storage)分离,极大提高了 ES 的可运维性,降低了学习成本。本文将先介绍下serverless含义,再介绍ElasticSearch serverless架构。 在serverless架构下,用户只需关注业务逻辑,无需管理服务

    2024年01月24日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包