elasticsearch - 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)个父级。嵌套可以变得任意深,但始终是有界的,并且很可能会有多个顶级父级。
我的目标是查询数据以获得两个答案:
给定 a
custom_id
,该文档的所有父母(直接父母、祖父母、...)是什么?给定任何查询结果,应用一个过滤器,只有给定的子节点
custom_id
(它本身不需要是原始查询结果的一部分)匹配。
Elasticsearchjoin
数据类型不适用,因为在我的情况下,单个文档可以同时充当父级和子级。nested
数据类型不允许这种搜索。
明确一点,我想在 Kibana 中返回查询结果。编写一个一次返回一个文档的脚本,递归地遍历文档parent_id
当然是可能的。我需要什么才能在 Kibana 中完成这项工作并在“发现”页面或可视化中呈现结果(我认为数据表很合适)?
解决方案
这是您在使用基于文档的数据库(弹性、mongo 等)时需要以不同方式解决的问题。elasticsearch中没有先验或递归连接...
但是在 mongo db 文档中有一个很好的文档来解决这个问题的最常见的解决方案,但是它们很容易适应弹性搜索。他们都有优点和缺点。在我的过去,基于“嵌套集”或“物化路径”的解决方案非常适用于基于链接或树的结构。
https://docs.mongodb.com/manual/applications/data-models-tree-structures/
玩得开心!
推荐阅读
- docker - 我的 Divio 项目中没有更改要求,那么为什么构建会因依赖冲突而失败?
- c# - 获取 IQueryable 的 RowCount 而不是 IQueryable
- java - JPA 可分页排序顺序区分大小写
- javascript - Yii 2 kartik dialog.prompt 输入类型为 textarea
- sql - Sql 改进选择结果
- sql - 如何获取上周每天在线的用户?
- ios - UINavigationBar - prefersLargeTitles - 如何将图像设置在标题的左侧?
- python - 我正在运行具有一定界限的 BFGS 优化。我的优化在收敛之前总是趋向边界的原因可能是什么?
- html - 在仍然使用列容器的同时,出血图像或容器离开视点?
- python - 在python中提取方括号和大括号内的字符串部分的最佳方法