父-子关系文档edit

父-子关系文档在实质上类似于嵌套对象模型(nested model) :允许将一个对象实体和另外一个对象实体关联起来。而这两种类型的主要区别是:在嵌套对象文档中,所有对象都是在同一个文档中,而在父-子关系文档中,父对象和子对象都是完全独立的文档。

父-子关系的主要作用是允许把一个类型的文档和另外一个类型的文档关联起来,构成一对多的关系:一个父文档可以对应多个子文档 。与 嵌套对象(nested objects) 相比,父-子关系的主要优势有:

  • 更新父文档时,不会重新索引子文档。
  • 创建,修改或删除子文档时,不会影响父文档或其他子文档。这一点在这种场景下尤其有用:子文档数量较多,并且子文档创建和修改的频率高时。
  • 子文档可以作为搜索结果独立返回。

Elasticsearch 维护了一个父文档和子文档的映射关系,得益于这个映射,父-子文档关联查询操作非常快。但是这个映射也对父-子文档关系有个限制条件:父文档和其所有子文档,都必须要存储在同一个分片中

父-子文档ID映射存储在doc values中。当映射完全在内存中时,doc values提供对映射的快速处理能力,另一方面当映射非常大时,可以通过溢出到磁盘提供足够的扩展能力