弹性搜索-尝试以递归方式触发搜索API

时间:2018-09-28 09:33:00

标签: java elasticsearch

在弹性搜索中,我确实想进行递归搜索。像基于第一个查询结果一样,我必须触发下一个查询(第一个查询结果是第二个查询的输入)。它应该一直查询直到结果为null

例如:

来自下表数据。

如果要搜索值car,则应给出idvalue,并应检查parent_id。然后,输入parent_id,它应该再次检查idvalue

同样,它应持续到parent_idnull

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

1 个答案:

答案 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"
    }
  }
}