在 Elasticsearch 中,多个***文档可以共享一个嵌套文档吗?
Posted
技术标签:
【中文标题】在 Elasticsearch 中,多个***文档可以共享一个嵌套文档吗?【英文标题】:In Elasticsearch, can multiple top-level documents share a single nested document? 【发布时间】:2013-10-22 17:08:26 【问题描述】:Elasticsearch 有嵌套文档(很棒)。我想用它来存储消息(***文档)及其作者(嵌套文档)。
由于一个作者可以有很多很多消息——可以将作者的一个版本作为多个消息的子级引用吗?
这样,如果您在一个地方更新作者数据,它会在所有引用它们的地方更新。
注意:这与:How to do a join in Elasticsearch -- or at the Lucene level 相关——这里的答案也可能解决这个问题。
【问题讨论】:
【参考方案1】:您可能想使用_parent
映射查看:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-parent-field.html
这允许您为作者创建一个类型,为消息创建一个单独的类型(使用 _parent 类型的作者),然后单独索引文档并随着时间的推移添加到消息中。您只需要更新一个作者的单一版本,它就会影响对该作者的所有消息的查询。
要查询特定作者的消息,您需要使用 has_parent 查询或过滤器。或者反过来,使用 has_child 查找具有特定消息的作者。
has_child 导致父文档具有与查询匹配的子文档 has_parent 会产生具有匹配查询的父文档的子文档我一直在使用这种更动态的表单而不是嵌套文档,它对我来说效果很好(对于查询和方面),但是在加载任何该类型的文档之前,您必须小心定义映射,因为添加了 @ 987654323@ 事后映射似乎对我不起作用。到目前为止,我一直未能管理重新索引。
【讨论】:
以上是关于在 Elasticsearch 中,多个***文档可以共享一个嵌套文档吗?的主要内容,如果未能解决你的问题,请参考以下文章
Spring Data Elasticsearch:具有相同文档的多个索引