我有层次化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上进行这项工作,并在“发现”页面或可视化视图中显示结果(我认为数据表很合适)?
答案 0 :(得分:0)
在使用基于文档的数据库(弹性,mongo等)时,您需要以不同的方式解决此问题。弹性搜索中没有基于先验或递归的连接...
但是在mongo db文档中,有一个很好的文档可以找到针对此问题的最常见解决方案,但它们很容易适应Elasticsearch。它们都有缺点。在我过去,基于“嵌套集”或“物化路径”的解决方案对于基于链接或基于树的结构非常有效。
玩得开心!