Elasticsearch / Kibana中的递归查询

时间:2019-06-13 19:44:22

标签: elasticsearch kibana

我有层次化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上进行这项工作,并在“发现”页面或可视化视图中显示结果(我认为数据表很合适)?

1 个答案:

答案 0 :(得分:0)

在使用基于文档的数据库(弹性,mongo等)时,您需要以不同的方式解决此问题。弹性搜索中没有基于先验或递归的连接...

但是在mongo db文档中,有一个很好的文档可以找到针对此问题的最常见解决方案,但它们很容易适应Elasticsearch。它们都有缺点。在我过去,基于“嵌套集”或“物化路径”的解决方案对于基于链接或基于树的结构非常有效。

DataFrameReader

玩得开心!