`nested`字段和`join`字段都是 Elasticsearch 中用于处理复杂数据结构的高级数据类型,但它们在设计目标、使用场景和实现方式上存在显著差异。以下是它们的主要区别:
---
1.设计目标
• `nested`字段:
• 目标:用于处理单个文档中的嵌套数组,将数组中的每个对象独立索引,使其可以独立于其他对象进行查询。
• 场景:适用于需要在数组中独立查询每个对象的场景,例如博客文章中的评论、订单中的商品等。
• `join`字段:
• 目标:用于在同一个索引中建立父子关系,允许文档之间形成层级关系。
• 场景:适用于需要表示一对多关系的场景,例如作者和书籍、问题和答案等。
---
2.数据结构
• `nested`字段:
• 数据存储在同一文档内部。
• 每个嵌套对象被索引为独立的隐藏文档,但仍然属于同一个父文档。
• 示例:
```json
PUT my-index/_doc/1
{
"title": "Elasticsearch Guide",
"comments": [
{ "user": "Alice", "comment": "Great article!" },
{ "user": "Bob", "comment": "Very