gpt4 book ai didi

elasticsearch - elasticsearch:获取所有具有相同最高祖先的文档

转载 作者:行者123 更新时间:2023-12-02 23:23:05 24 4
gpt4 key购买 nike

我正在尝试获取共享同一顶级祖先的所有文档,其中一个 child 可以是多个文档的 parent ,祖 parent ,祖 parent 或外祖 parent 等。

假设我有一个这样的结构体(从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"]
}
}
}
}
}
}

但是,理论上可以永远回答评论和评论答案。所以说我有一个问题,它的结构如下:
                               (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就得到所有文档(ID 1、5、8、9、10、11、12、15、16、17、19)?

最佳答案

这是Elasticsearch documentation的摘录:

Four common techniques are used to manage relational data in Elasticsearch:

Application-side joins
Data denormalization
Nested objects
Parent/child relationships

Often the final solution will require a mixture of a few of these techniques.

正如 和Val 所建议的那样,您可以通过引入两个字段“top_most_ansestor”和“父”来实现应用程序侧连接。这是一个非常合理和简单的解决方案,因为它不需要Elasticsearch连接字段。

但是,您可能需要组合技术。

如果要使用连接字段,则可以考虑将顶级祖先定义为所有子代,孙代等的父代,并在应用程序中维护树的层次结构。从Elasticsearch的 Angular 来看,您将有一棵浅而宽的树(单亲,有很多叶子)
question(id 1): [ids 1, 5, 8, 9, 10, 11, 12, 15, 16, 17, 19]

整个树的检索将通过一个请求完成。如上所述,您的应用程序将以不同的方式查看文档:深树。例如。对于文件9,您将拥有
_id:9 {"parent":8,"text":"some text", "type":"answer"} 

您应该使用哪种技术取决于其他要求和您的偏好。越简单越好。

关于elasticsearch - elasticsearch:获取所有具有相同最高祖先的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46429604/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com