在弹性搜索中,我确实想进行递归搜索。像基于第一个查询结果一样,我必须触发下一个查询(第一个查询结果是第二个查询的输入)。它应该一直查询直到结果为null
。
例如:
来自下表数据。
如果要搜索值car
,则应给出id
和value
,并应检查parent_id
。然后,输入parent_id
,它应该再次检查id
和value
。
同样,它应持续到parent_id
为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
答案 0 :(得分:0)
您正在寻找的解决方案实际上是SELF JOIN
操作。
您可以将此link称为如何通过多个级别的父级对数据进行建模的方法,但请记住,这会带来很高的查询成本。同样,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"
}
}
}