【Elasticsearch】`nested`字段

news/2025/3/12 12:30:41/

Elasticsearch 的`nested`字段是一种强大的数据类型,用于处理嵌套对象数组,允许将每个对象独立索引和查询。以下是关于`nested`字段的详细说明:

1.`nested`字段的定义

`nested`字段是`object`数据类型的特殊版本,允许将对象数组索引为独立的隐藏文档。这使得每个嵌套对象可以独立于其他对象进行查询。例如:

```json

PUT /blog-posts

{

  "mappings": {

    "properties": {

      "title": { "type": "text" },

      "content": { "type": "text" },

      "comments": {

        "type": "nested",

        "properties": {

          "username": { "type": "keyword" },

          "comment": { "type": "text" },

          "created_at": { "type": "date" }

        }

      }

    }

  }

}

```

在这个例子中,`comments`字段被定义为`nested`类型,每个评论对象都可以独立查询。

2.索引和查询`nested`字段

• 索引:当索引包含`nested`字段的文档时,Elasticsearch 会将数组中的每个对象作为独立的隐藏文档进行索引,同时保留它们之间的关系。

• 查询:查询`nested`字段需要使用`nested`查询,这允许你将嵌套对象视为独立文档进行查询。例如:

```json

GET /blog-posts/_search

{

  "query": {

    "nested": {

      "path": "comments",

      "query": {

        "bool": {

          "must": [

            { "match": { "comments.username": "Alice" }},

            { "match": { "comments.comment": "Great post!" }}

          ]

        }

      }

    }

  }

}

```

 

 

这个查询会匹配所有包含用户名为`Alice`并且评论内容为`Great post!`的博客文章。

 

 

3.`nested`字段的映射

要使用`nested`字段,需要在索引映射中明确指定字段类型为`nested`,并定义其内部结构。例如:

 

 

```json

PUT /my-index

{

  "mappings": {

    "properties": {

      "user": {

        "type": "nested",

        "properties": {

          "first": { "type": "text" },

          "last": { "type": "text" }

        }

      }

    }

  }

}

```

4.`nested`字段的性能和限制

• 性能:`nested`字段的查询性能通常比普通字段慢,因为每个嵌套对象都被索引为独立的文档。然而,它允许更灵活的查询和聚合。

• 限制:

• 每个索引中允许的最大不同`nested`映射数量默认为 50。

• 每个文档中允许的最大嵌套对象数量默认为 10000。

5.`nested`字段的使用场景

• 独立查询:当你需要独立查询数组中的每个对象时,`nested`字段非常有用。

• 复杂数据结构:适用于需要表示复杂数据结构的场景,例如博客文章中的评论。

• 动态查询:`nested`字段支持复杂的动态查询,例如基于多个字段的组合条件。

6.`nested`字段的高级用法

• `inner_hits`:在查询中使用`inner_hits`可以返回匹配的嵌套文档,并支持高亮显示。

• 聚合:可以使用`nested`聚合和`reverse_nested`聚合来分析嵌套数据。

7.与其他数据建模方式的比较

• 扁平化数据:对于简单的查询,使用扁平化数据结构可能更高效。

• 父子关系:如果需要跨索引建模复杂关系,可以使用父子关系(`parent-child`)。

总之,`nested`字段是 Elasticsearch 中处理复杂数据结构的强大工具,但需要根据具体需求权衡性能和灵活性。


http://www.ppmy.cn/news/1573084.html

相关文章

Linux下学【MySQL】中如何实现:多表查询(配sql+实操图+案例巩固 通俗易懂版~)

每日激励:“不设限和自我肯定的心态:I can do all things。 — Stephen Curry” 绪论​: 本章是MySQL篇中,非常实用性的篇章,相信在实际工作中对于表的查询,很多时候会涉及多表的查询,在多表查询…

七星棋牌全开源修复版源码解析:6端兼容,200种玩法全面支持

本篇文章将详细讲解 七星棋牌修复版源码 的 技术架构、功能实现、二次开发思路、搭建教程 等内容,助您快速掌握该棋牌系统的开发技巧。 1. 七星棋牌源码概述 七星棋牌修复版源码是一款高度自由的 开源棋牌项目,该版本修复了原版中的多个 系统漏洞&#…

【MyBatis】预编译SQL与即时SQL

目录 1. 以基本类型参数为例测试#{ }与${ }传递参数的区别 1.1 参数为Integer类型 1.2 参数为String类型 2. 使用#{ }传参存在的问题 2.1 参数为排序方式 2.2 模糊查询 3. 使用${ }传参存在的问题 3.1 SQL注入 3.2 对比#{ } 与 ${ }在SQL注入方面存在的问题 3.3 预编译…

Python异步编程优雅实践

Python 异步编程是现代高效开发的重要技能,尤其在处理 I/O 密集型任务(如网络请求、文件操作)时表现出色。本文将从基础概念入手,逐步深入到高级实践,帮助读者掌握 asyncio 和 aiohttp 等核心工具,最终实现…

利用亚马逊云科技RDS for SQL Server配置向量数据存储

生成式人工智能(AI)正迎来又一个快速发展期,引起了开发者们的广泛关注。将生成式能力集成到商业服务和解决方案中变得非常重要。当前的生成式AI解决方案是机器学习和深度学习模型逐步进化迭代的结果。从深度学习到生成式AI的质变飞跃主要是由…

XX食品有限公司智能制造汇报材料(71页PPT)

该文档是XX食品有限公司的智能制造汇报材料,内容涵盖行业背景及竞争对手分析、公司智能制造现状和规划方案。报告指出,食品工业在“一带一路”战略下大市场趋势显著,且国家品牌战略推进使品牌文化热情高涨。同时,婴幼儿、青少年、…

12苍穹外卖之工作台(Apache POI、Excel)

课程内容 工作台 Apache POI 导出运营数据Excel报表 功能实现:工作台、数据导出 工作台效果图: 数据导出效果图: 在数据统计页面点击数据导出:生成Excel报表 1. 工作台 1.1 需求分析和设计 1.1.1 产品原型 工作台是系统运…

SQL Server 导入Excel数据

1、选中指定要导入到哪个数据库,右键选择 》任务 》导入数据 2、数据源 选择Excel,点击 下一步(Next) 3、目前 选择OLE DB Provider ,点击 下一步(Next) 4、默认 ,点击 下一步(Next)…