ES中Object类型和Nested
Object类型会将对象扁平化,Nested将会把对象保存为原本的JSON格式,例子如下是一个正常的对象:{"team_name":"elastic" ,"region": "CN""master" : "xiaoming","user_count" : 2,"users" : [{"name" : "John", "age": "26","sex": 1} ,{"name" : "Smith",
·
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
}
更多推荐
已为社区贡献19条内容
所有评论(0)