<1> 如果我们依靠动态映射,comments
栏位会被自动建立为一个object
栏位。
因为所有内容都在同一个文档中,使搜寻时并不需要连接(join)blog文章与回应,因此搜寻表现更加优异。
问题在於以上的文档可能会如下所示的匹配一个搜寻:
造成跨对象配对的原因如同我们在对象阵列中所讨论到,在于我们优美结构的JSON文档在索引中被扁平化为下方的 键-值 形式:
Alice
与 以及 John
与2014-09-01
之间的关联已经无法挽回的消失了。
当object
类型的栏位用于储存单一对象是非常有用的。
从搜寻的角度来看,对於排序一个对象阵列来说关联是不需要的东西。
这是嵌套对象被设计来解决的问题。 藉由映射栏位为nested
类型而不是object
类型,
每个嵌套对象会被索引为一个隐藏分割文档,例如:
<2> 第二个对象
<3> 根或是父文档
藉由分别索引每个嵌套对象,对象的栏位中保持了其关联。 我们的查询可以只在同一个嵌套对象都匹配时才回应。
这些额外的嵌套对象被隐藏起来,我们无法直接访问他们。 为了要新增丶修改或移除一个嵌套对象,我们必须重新索引整个文档。
要牢记搜寻要求的结果并不是只有嵌套对象,而是整个文档。