java - 弹性搜索 - 尝试以递归方式触发搜索 api
问题描述
在弹性搜索中,我确实想做一种递归搜索。就像基于第一个查询结果一样,我必须触发下一个查询(第一个查询结果是第二个查询的输入)。它应该继续查询,直到结果为null
.
例如:
从下表数据。
如果我正在搜索 value car
,它应该给出id
andvalue
并且应该检查parent_id
. 然后,parent_id
是输入,它应该一次id
又一次地检查value
。
同样,它应该一直到parent_id
is null
。
id Parent_id Value
1 null null
2 45 Hundai
3 89 Volvo
4 1 Benz
5 3 Audi
6 4 BMW
7 6 car
如果我搜索一个值,car
我应该得到以下详细信息。
id Value
7 car
6 BMW
4 Benz
1 null
解决方案
您正在寻找的解决方案实际上是SELF JOIN
操作。
您可以参考此链接,了解如何通过多个父级对数据进行建模,但请记住,它的查询成本非常高。再一次,elasticsearch
不应该像我们在RDBMS
.
您可以做的是让您的文档以denormalized
某种方式建模,并将该信息存储为单独的字段。
例如,您可以拥有hierarchy
如下文档中所述的字段,该字段将在indexing
操作期间创建,并使用简单的查询来获取您正在寻找的结果。
POST tempindex/1
{
"id": 7,
"name": "Car",
"parentid": 6,
"hierarchy": "7/6/5/2/1/null"
}
然后你可以简单地让下面的查询为你工作,这将返回你以结尾的文档列表null
GET tempindex/_search
{
"query": {
"match": {
"hierarchy": "null"
}
}
}
推荐阅读
- angular - 对 webApi 的角度无序(异步)调用
- c++ - 如果类型是引用,则行为不同
- elasticsearch-5 - 如何删除elasticsearch中的任务文档?
- elasticsearch - 使用 Spark 更新 elasticsearch 文档
- javascript - 通过 JavaScript 增加计数,直到达到给定的值
- powerbi - Power Bi:刷新“发布到 Web”链接
- kibana - 无法使用 systemctl 启动 kibana.service
- python - 如何将字典作为位置参数而不是关键字参数传递
- swift - 快速崩溃日志
- postgresql - Postgres 不会在 docker 中初始化数据库