在Elasticsearch中,多个顶级文档可以共享一个嵌套文档吗?

时间:2013-10-22 17:08:26

标签: nosql nested elasticsearch

Elasticsearch有嵌套文档(很棒)。我想用它来存储消息(顶级文档)和它们的作者(嵌套文档)。

由于一位作者可以拥有许多消息 - 可以将一个版本的作者引用为多个消息的子节点吗?

这样,如果您在一个地方更新作者数据,它会更新他们引用的所有地方。

注意:这与:How to do a join in Elasticsearch -- or at the Lucene level有关 - 这里的答案也可以解决这个问题。

1 个答案:

答案 0 :(得分:4)

您可能希望使用_parent映射进行查看:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-parent-field.html

这允许您为Author创建一个类型,为Message创建一个单独的类型(使用_parent类型的Author),然后单独索引文档并随时间添加到消息中。您只需更新作者的单个版本即可影响对该作者的所有消息的查询。

要使用特定作者查询消息,您需要使用has_parent查询或过滤器。或者相反,使用has_child查找具有特定消息的作者。

  • has_child会生成包含与查询匹配的子文档的父文档
  • has_parent会生成包含与查询匹配的父文档的子文档

我一直在使用这个更动态的表单而不是嵌套文档,它对我来说效果很好(对于查询和构面),但是在加载任何类型的文档之前必须注意定义映射,因为添加{ {1}}映射事后似乎对我不起作用。到目前为止,重新索引一直是我无法管理的。