Object类型会将对象扁平化,Nested将会把对象保存为原本的JSON格式,例子如下是一个正常的对象:

{
    "team_name":"elastic" ,
    "region": "CN"
    "master" : "xiaoming",
    "user_count" : 2,
    "users" : [
        {"name" : "John", "age": "26","sex": 1} ,
        {"name" : "Smith", "age": "28","sex": 2}
    ]
}

使用Object类型存储时,会存储为,可以看到users被扁平化了:

  {
    "team_name":"elastic" ,
    "region": "CN"
    "master" : "xiaoming",
    "user_count" : 2,
    "users.name" : ["John","Smith"],
    "users.age" : [26,28],
    "users.sex" : [1,2]
  }

这时候会出现一个问题,如果想查找John这个人,用John和错误的年龄28,其实John是26,去搜索,这样也能搜索的到,其实 John-28,是搜不到这个人的,但是因为扁平化的原因,导致可以搜索的到了。

使用Nested会演变如下,这是对象不再是扁平化的,可以按照上述的逻辑搜索,此时结果就是正确的:

// 根文档
{
    "team_name":"elastic" ,
    "region": "CN"
    "master" : "xiaoming",
    "user_count" : 2
}
  // 嵌套文档1
{
    "users.name" : "John" ,
    "users.age" : 26,
    "users.sex" : 1
}
// 嵌套文档2
{
    "users.name" : "Smith",
    "users.age" : 28,
    "users.sex" : 2
}

参考:https://my.oschina.net/russellgao/blog/4805275

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐