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

qxsslcnc  于 2021-06-10  发布在  ElasticSearch
关注(0)|答案(1)|浏览(442)

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

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

我正在寻找一种打开/关闭搜索结果的方法。例如,如果禁用bird,则在对术语“bird”执行搜索时,bird及其子级不应出现在结果中。如果启用了bird,则在搜索术语“bird”时,应该出现bird(或bird及其子级)。
问题2现在,我把这个树结构作为ElasticSearch中的一个扁平列表作为一个字段,使它成为树结构的最佳方法是什么(我知道我可以使用嵌套字段,但考虑到我们有30层深度和100000个子级,大多数文档只有几个子级)。
欢迎任何意见。

agxfikkp

agxfikkp1#

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

"canary":{
    "l1":"living creatures",
    "l2":"carnivore",
    "l3":"bird",
}
"dolphin":{
    "l1":"living creatures",
    "l2":"fish",
}
"Penguin":{
    "l1":"living creatures",
    "l2":"fish, bird",
    "##assuming penguin is both
}

当您需要禁用条目时,您可以简单地禁用任何包含bird的文档,当然数据是重复的,但这是nosql

相关问题