深入了解ElasticSearch的Nested数据类型

这篇具有很好参考价值的文章主要介绍了深入了解ElasticSearch的Nested数据类型。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

这个时候就需要用到nested,nested类型是object数据类型的特殊版本,它允许对象数组以一种可以相互独立查询的方式进行索引。

在Nested内部,每个对象索引其实是一个单独的隐藏文档,这意味着每个嵌套对象都可以独立于其他对象进行查询。

使用Nested需要先创建索引,依旧通过上边的这个例子

DELETE my_index

PUT my_index

{

“mappings”: {

“properties”: {

“user”: {

“type”: “nested”

}

}

}

}

PUT my_index/_doc/1

{

“group” : “fans”,

“user” : [

{

“first” : “John”,

“last” : “Smith”,

“age” : “23”

},

{

“first” : “Alice”,

“last” : “White”,

“age”:“24”

}

]

}

复制代码

首先创建my_index索引,设置user的类型为nested,接着在查询时,需要通过es的nested查询语句查询,使用同样的方式查询first为John,last为White的用户,这次的结果是不存在。因为通过nested存储的对象是具有关联性的。

GET my_index/_search

{

“query”: {

“nested”: {

“path”: “user”,

“query”: {

“bool”: {

“must”: [

{ “match”: { “user.first”: “John” }},

{ “match”: { “user.last”: “White” }}

]

}

}

}

}

}

复制代码

上边的DSL语句用Java API实现如下:

@Test

public void testNested() throws Exception{

//自己封装的一个获取RestHighLevelClient的类

RestHighLevelClient client=ElasticSearchClient.getClient();

SearchRequest request = new SearchRequest(“my_index”);

SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();

boolQueryBuilder.must(QueryBuilders.matchQuery(“user.first”,“John”));

boolQueryBuilder.must(QueryBuilders.matchQuery(“user.last”,“White”));

searchSourceBuilder.query(QueryBuilders.nestedQuery(“user”,boolQueryBuilder, ScoreMode.None));

request.source(searchSourceBuilder);

SearchResponse search = client.search(request, RequestOptions.DEFAULT);

SearchHit[] hits = search.getHits().getHits();

for (int i = 0; i < hits.length; i++) {

SearchHit hit = hits[i];

System.out.println(hit.getSourceAsString());

}

}

复制代码

(三)使用nested进行聚合查询

=================

除了使用nested进行普通查询外,nested也支持聚合查询,同样是上面的例子,现在做一个对年龄聚合的操作:

GET my_index/_search

{

“aggs”: {

“nestedAgg”: {

“nested”: {

“path”: “user”

},

“aggs”: {

“ageAgg”: {

“terms”: {

“field”: “user.age.keyword”,

“size”: 10

}

}

}

}

}

}

复制代码

(五)nested中的inner_hits

======================

查询nested对象时,只要查询条件符合这个nested对象里的某一个条件,整个nested对象都会被检索出来。比如上面这个例子中,我只想查询叫做John Smith的这个人,但是通过普通的query查询会把整条记录都查询出来,效果就是这样:

“hits” : [

{

“_index” : “my_index”,

“_type” : “_doc”,

“_id” : “1”,

“_score” : 1.3862942,

“_source” : {

“group” : “fans”,

“user” : [

{

“first” : “John”,

“last” : “Smith”,

“age” : “23”

},

{

“first” : “Alice”,

“last” : “White”,

“age” : “24”

}

]

}

}

]

复制代码

如果只想要nested中里的一个对象,就可以使用inner_hits。使用比较简单,只需要在查询语句之后加上inner_hits即可。

GET my_index/_search

{

“query”: {

“nested”: {

“path”: “user”,

“query”: {

“bool”: {

“must”: [

{ “match”: { “user.first”: “John” }},

{ “match”: { “user.last”: “Smith” }}

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。深入了解ElasticSearch的Nested数据类型,程序员,elasticsearch,大数据,搜索引擎

深入了解ElasticSearch的Nested数据类型,程序员,elasticsearch,大数据,搜索引擎

深入了解ElasticSearch的Nested数据类型,程序员,elasticsearch,大数据,搜索引擎

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

深入了解ElasticSearch的Nested数据类型,程序员,elasticsearch,大数据,搜索引擎

最后

整理的这些资料希望对Java开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。

深入了解ElasticSearch的Nested数据类型,程序员,elasticsearch,大数据,搜索引擎

深入了解ElasticSearch的Nested数据类型,程序员,elasticsearch,大数据,搜索引擎

其实面试这一块早在第一个说的25大面试专题就全都有的。以上提及的这些全部的面试+学习的各种笔记资料,我这差不多来回搞了三个多月,收集整理真的很不容易,其中还有很多自己的一些知识总结。正是因为很麻烦,所以对以上这些学习复习资料感兴趣
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!
文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。

[外链图片转存中…(img-Y9lOU9dp-1712484938472)]

[外链图片转存中…(img-B2XgqZD2-1712484938472)]

其实面试这一块早在第一个说的25大面试专题就全都有的。以上提及的这些全部的面试+学习的各种笔记资料,我这差不多来回搞了三个多月,收集整理真的很不容易,其中还有很多自己的一些知识总结。正是因为很麻烦,所以对以上这些学习复习资料感兴趣
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!文章来源地址https://www.toymoban.com/news/detail-847079.html

到了这里,关于深入了解ElasticSearch的Nested数据类型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Elasticsearch 8.X 如何依据 Nested 嵌套类型的某个字段进行排序?

    这是来自社区的一个真实企业场景问题。 https://elasticsearch.cn/question/13135 如下所示, 希望在查出的结果后, 对结果进行后处理,对tags列表,根据depth进行排序。 Elasticsearch 能支持的排序方式罗列如下: 包含但不限于: 基于特定字段的排序 基于Nested对象字段的排序 基于特定

    2024年02月02日
    浏览(42)
  • 【ElasticSearch】深入了解 ElasticSearch:开源搜索引擎的力量

    在信息时代,数据的增长速度之快让我们迅速感受到了信息爆炸的挑战。在这个背景下,搜索引擎成为了我们处理海量数据的得力工具之一。而 ElasticSearch 作为一款强大的开源搜索引擎,不仅能够高效地存储和检索数据,还在日志分析、实时监控等领域展现了其卓越的性能。

    2024年02月08日
    浏览(38)
  • 深入了解Linux中常见的五种文件类型

    了解文件类型对于正确理解和管理文件系统非常重要。希望本文能够帮助您更好地了解Linux中常见的文件类型及其在ls -l命令输出中的表示方式。​ 在Linux操作系统中,文件是操作系统中最基本的概念之一。在Linux中,每个文件都有一个特定的类型,这决定了系统如何处理和解

    2024年01月23日
    浏览(26)
  • 程序员必须了解的 10个免费 Devops 工具

    近年来,DevOps 已经成为一门将软件开发 (Dev) 与 IT 运维 (Ops) 相融合的重要学科,目的是为了缩短软件的开发生命周期并提供高质量软件的持续交付。 这篇文章整理了十种基本的免费开源的 DevOps 工具,这些工具已经在实践中得到了证明,凭借有效性和能够简化 DevOps 流程的能

    2024年04月11日
    浏览(52)
  • 作为程序员,你很有必要了解一下IVX

    iVX 是一个“零代码”的可视化编程平台,拥有方便的在线集成开发环境,不需要下载开发环境,打开浏览器即可随时随地进行项目编辑。iVX 还拥有“一站式”的云资源,通过这一套一站式服务,iVX 可以实现一站式研发、一站式部署、一站式维护。iVX相当于“一款零代码可视

    2024年02月15日
    浏览(40)
  • 【c++】类和对象(六)深入了解隐式类型转换

    🔥个人主页 : Quitecoder 🔥 专栏 : c++笔记仓 朋友们大家好,本篇文章我们来到 初始化列表,隐式类型转换以及explicit的内容 在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值 虽然上述构造函数调用之后,对象中已经有了一个初始值,但是

    2024年04月13日
    浏览(30)
  • 深入了解 Elasticsearch 8.1 中的 Script 使用

    Elasticsearch 中的 Script 是一种灵活的方式,允许用户在查询、聚合和更新文档时执行自定义的脚本。这些脚本可以用来动态计算字段值、修改查询行为、执行复杂的条件逻辑等等。 支持多种脚本语言,包括 Painless 、 Expression 、 Mustache 、 Java 等,其中默认的是 Painless 。 Painle

    2024年02月07日
    浏览(25)
  • 程序员不得不了解的计算机进制转换

    最近在备考软考的软件设计师考试,学到了关于计算机的数据表示,由于我是半路出家学的Java,导致计算机基础知识很差,在这里记录一下学习感受 早期计算机的存储介质是晶体管,晶体管根据电压不同,只能表示2种状态,也就是0和1 计算机使用二进制运算更加方便 更详细

    2024年02月05日
    浏览(29)
  • 黑马程序员带你快速了解区块链六大特点

    区块链上数据的验证、记账、存储、维护和传输等均是基于分布式结构,采用数学和算法的方法而不是中心机构来构建分布式节点之间的信任关系,从而形成非中心化的、可信任的分布式结构。交易参与者可以自证并直接交易,不需要依赖第三方中介机构的信任背书。 不可篡

    2024年03月25日
    浏览(31)
  • 深入了解C语言中的结构体类型与内存对齐

    在C语言中,结构体是一种 自定义的数据类型 , 它允许我们将不同类型的数据组合在一起,形成一个新的数据类型 。结构体的使用为我们解决了一些复杂数据的表示和处理问题,不仅限于单单的整型或者字符。本文将深入探讨结构体类型、结构体变量的创建和初始化,并详

    2024年04月11日
    浏览(32)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包