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

标签 algorithm elasticsearch search data-structures

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

living creatures
      /  \
    bird  fish
    / \    / \
canary Penguin
我正在寻找一种打开/关闭搜索结果的方法。例如,如果禁用了鸟,则在对术语“鸟”进行搜索时,不应在结果中显示鸟及其子代。如果启用了鸟,则在搜索“鸟”一词时,应显示鸟(或鸟及其子代)。
问题2
现在,我将这种树结构作为 flex 列表中的一个扁平列表放入字段中,使其成为树结构的最佳方法是什么(我知道我可以使用嵌套字段,但是考虑到我们有30个级别的深度和100,000个级别子代,大多数文档只有几个子代。
欢迎任何意见。

最佳答案

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

"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。

关于algorithm - 搜索树状结构化关系数据的算法(使用示例:elasticsearch),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64174050/

相关文章:

c++ - 在字符串中查找所有需要的单词

algorithm - 内存有限时位图编辑器的快速撤消/重做?

ruby-on-rails - 我收到错误 'Unknown key for a VALUE_STRING in [q]'

sql - 使用Elastic查询中的值列表检查字段的值

elasticsearch - 在ElasticSearch中有一个子查询类型搜索

android - 按下搜索按钮时未触发 onCreate() 或 onNewIntent()

C 试图修复无限循环

algorithm - Shell排序的时间复杂度?

algorithm - 二进制计数器的平均情况

search - Elasticsearch 短语之间的 OR 运算