在 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 中,多个***文档可以共享一个嵌套文档吗?的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearch的简单使用

elasticsearch文档索引的CRUD操作

Spring Data Elasticsearch:具有相同文档的多个索引

Elasticsearch是啥?

Elasticsearch7.8.0版本进阶——多文档操作流程

如何设置具有多个实体绑定的 ElasticSearch 索引结构