【发布时间】:2017-09-26 14:46:03
【问题描述】:
我正在尝试获取共享同一个最顶层祖先的所有文档,其中一个孩子可以是多个文档的父母、祖父母、祖父母等。
假设我有一个这样的结构(借自https://www.elastic.co/guide/en/elasticsearch/reference/5.6/parent-join.html):
(parent)
question
/ \
/ \
comment answer
(child) (child)
在代码中:
PUT my_index
{
"settings": {
"mapping.single_type": true
},
"mappings": {
"doc": {
"properties": {
"my_join_field": {
"type": "join",
"relations": {
"question": ["answer", "comment"]
}
}
}
}
}
}
但是,理论上可以永远回答 cmets 和评论答案。假设我有一个问题,其结构如下:
(id: 1)
question
/ \
/ \
answer answer
(id: 5) (id: 8)
/ \ |
/ \ |
comment answer answer
(id: 15) (id: 12) (id: 9)
/ \ | / \
/ \ | / \
answer answer comment answer answer
(id: 16)(id: 17) (id: 19) (id: 10)(id: 11)
只知道 id 9,如何获取所有文档(ids 1、5、8、9、10、11、12、15、16、17、19)?
【问题讨论】:
-
由于您试图获取给定文档的所有孩子和父母,我看不出文档 5 下面的分支与文档 9 的相关性。
-
嗯,就我而言,它非常相关,因为我想获取与 doc 9 相关的所有文档。原因是文档分支更多,然后显示的分支没有连接(并且它们与 doc 9 无关)。
-
所以,总而言之,您基本上需要获取与 doc 9 属于同一树的所有文档,即与 doc 9 共享相同最顶层祖先的所有文档。跨度>
-
是的 - 这正是我所需要的(并且根据您的输入更改了问题)!
-
您可以做的最简单的事情是在树的每个文档中包含一个包含最顶层祖先的 id 的新字段。这样您就可以轻松检索具有该 ID 的所有文档。
标签: elasticsearch