【问题标题】:Recursive queries in Elasticsearch/KibanaElasticsearch/Kibana 中的递归查询
【发布时间】:2019-06-14 04:49:49
【问题描述】:

我有分层的 Elasticsearch 数据,我将其“标准化”为以下映射的文档:

_id | custom_id | parent_id | text | value

_id 是自动生成的 Elasticsearch id,custom_id 是我分配的唯一整数,parent_id 充当外键,当当前文档是引用的子文档时,引用文档的 custom_id一。两个文档的示例可能如下所示:

abc | 1 | -1 | foo | 123
def | 2 | 1 | bar | 456

每个文档都只有一个(任何parent_id > 0)或没有(parent_id = -1)父级。嵌套可以任意深,但始终是有界的,并且很可能会有多个顶级父级。

我的目标是查询数据以获得两个答案:

  • 给定custom_id,该文档的所有父母(直接父母、祖父母……)是什么?

  • 给定任何查询结果,应用一个过滤器,只有给定 custom_id(它本身不必是原始查询结果的一部分)的子代匹配。

Elasticsearch join 数据类型不适用,因为在我的情况下,单个文档可以同时充当父文档和子文档。 nested 数据类型不允许这种搜索。

明确一点,我想在 Kibana 中返回查询结果。编写一个一次返回一个文档的脚本,递归地遍历parent_id 当然是可能的。我需要什么才能在 Kibana 中完成这项工作并在“发现”页面或可视化中呈现结果(我认为数据表很合适)?

【问题讨论】:

    标签: elasticsearch kibana


    【解决方案1】:

    这是您在使用基于文档的数据库(elastic、mongo 等)时需要以不同方式解决的问题。 elasticsearch中没有先验或递归连接...

    但是在 mongo db 文档中有一个很好的文档来解决这个问题的最常见的解决方案,但是它们很容易适应弹性搜索。他们都有优点和缺点。在我过去,基于“嵌套集”或“物化路径”的解决方案对于基于链接或树的结构非常有效。

    https://docs.mongodb.com/manual/applications/data-models-tree-structures/

    玩得开心!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多