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

【Elasticsearch】`nested`字段

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 中处理复杂数据结构的强大工具,但需要根据具体需求权衡性能和灵活性。

相关文章:

  • 巨控GRM530系列的远程模块用于PLC远程上下载方案
  • 9.综合调试|输入不能存在空格|desc存在None|输出权值和ID|函数重名|修改文件名|权值和实际关键词出现次数(C++)
  • 网工项目理论1.10 路由结构设计
  • 999感冒灵抖音KOL内容营销案例拆解
  • 2.17日学习总结
  • javacv将视频切分为m3u8视频并播放
  • 三级等保项目设备清单及高风险项整改方向
  • 嵌入式 lwip http server makefsdata
  • Node.js 异步并发控制:`p-map` 和 `p-limit` 的使用与对比
  • ubuntu在线安装PostgreSQL(pgsql)
  • 大幂计算和大阶乘计算【C语言】
  • idea 2023.3.7常用插件
  • Redis基本数据结构
  • 使用EasyExcel和多线程实现高效数据导出
  • 机器学习_11 线性回归知识点总结
  • Linux top 命令
  • 相机开发调中广角和焦距有什么不一样
  • IC验证典型测试向量
  • FreeRTOS第8篇:同步的“信号灯”——信号量与互斥锁
  • cURL请求与Javascript请求转换工具
  • 三位成功女性,如何应对失败
  • 见证上海援藏30年成果,萨迦非遗珍品展来沪
  • 马上评丨学生举报食堂饭菜有蛆,教育局应该护谁的犊子
  • 从“网点适老化”到“社区嵌入式”,“金融为老上海模式”如何探索?
  • 专访|伊朗学者:美伊核谈不只是改革派立场,但伊朗不信任美国
  • 广州多条BRT相关线路将停运,全市BRT客运量较高峰时大幅下降