搜索树状结构化关系数据的算法使用示例:elasticsearch

问题描述

问题1: 我有一个类似树的数据结构来搜索项目,例如

living creatures
      /  \
    bird  fish
    / \    / \
canary Penguin

我正在寻找一种打开/关闭搜索结果方法。例如,如果禁用了鸟,则在对术语“鸟”进行搜索时,不应在结果中显示鸟及其子代。如果启用了鸟,则在搜索“鸟”一词时,应显示鸟(或鸟及其子代)。

问题2 现在,我将这种树结构作为弹性列表中的一个扁平列表放入字段中,使其成为树结构的最佳方法是什么(我知道我可以使用嵌套字段,但是考虑到我们有30个级别的深度和100,000个级别孩子,大多数文档只有几个孩子。

欢迎任何评论

解决方法

在这种情况下,您不必使用嵌套,可以使用展平列表,将最低级别的字段用作索引/主键,并将其每个父级作为字段,这样您的条目将变为

ISSUE-ID bla-bla

然后,当您需要禁用该条目时,您可以简单地禁用其中有鸟的任何文档,当然数据会重复,但这不是noSQL