【问题标题】:In Elasticsearch, can multiple top-level documents share a single nested document?在 Elasticsearch 中,多个顶级文档可以共享一个嵌套文档吗?
【发布时间】:2013-10-22 17:08:26
【问题描述】:

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

由于一个作者可以有很多很多消息——可以将作者的一个版本作为多个消息的子级引用吗?

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

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

【问题讨论】:

    标签: nosql nested elasticsearch


    【解决方案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@ 事后映射似乎对我不起作用。到目前为止,我一直未能管理重新索引。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多