首页 > 解决方案 > 弹性搜索 - 尝试以递归方式触发搜索 api

问题描述

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

例如:

从下表数据。

如果我正在搜索 value car,它应该给出idandvalue并且应该检查parent_id. 然后,parent_id是输入,它应该一次id又一次地检查value

同样,它应该一直到parent_idis 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

标签: javaelasticsearch

解决方案


您正在寻找的解决方案实际上是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"
    }
  }
}

推荐阅读