Elasticsearch有嵌套文档(很棒)。我想用它来存储消息(顶级文档)和它们的作者(嵌套文档)。
由于一位作者可以拥有许多消息 - 可以将一个版本的作者引用为多个消息的子节点吗?
这样,如果您在一个地方更新作者数据,它会更新他们引用的所有地方。
注意:这与:How to do a join in Elasticsearch -- or at the Lucene level有关 - 这里的答案也可以解决这个问题。
答案 0 :(得分:4)
您可能希望使用_parent
映射进行查看:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-parent-field.html
这允许您为Author创建一个类型,为Message创建一个单独的类型(使用_parent类型的Author),然后单独索引文档并随时间添加到消息中。您只需更新作者的单个版本即可影响对该作者的所有消息的查询。
要使用特定作者查询消息,您需要使用has_parent查询或过滤器。或者相反,使用has_child查找具有特定消息的作者。
我一直在使用这个更动态的表单而不是嵌套文档,它对我来说效果很好(对于查询和构面),但是在加载任何类型的文档之前必须注意定义映射,因为添加{ {1}}映射事后似乎对我不起作用。到目前为止,重新索引一直是我无法管理的。