如何通过其他文档(ElasticSearch)的字段值获取嵌套文档?

时间:2017-08-04 13:35:35

标签: java elasticsearch

示例查询:

localhost:8080/content/child/123

此查询应返回父ID等于“123”的doc,然后我需要从返回的文档中获取id并在Elastic中搜索父id等于此id的文档。

示例结果:

{ "id": "test", "parentId" : "123", "name" : "bambo" }

{ "id": "someId", "parentId" : "test", "name" : "bambo 2" }

1 个答案:

答案 0 :(得分:0)

首先,GET /content/child/123表示搜索_index=content; _type=child; _id=123所在的特定文档,而不是您要查找的内容。 _id字段与您的idparentId字段完全不同。

据我所知,ES目前没有"嵌套搜索"你描述的功能。您需要进行两次单独的搜索。

要搜索包含特定值(" 123")的字段(" parentId")的文档,您需要以下搜索查询

{
  "query": {
    "bool": {
      "filter": {
        "term": {
          "parentId": "123"
        }
      }
    }
  }
}

首次搜索后,响应将是JSON对象resp。您可以在resp["hits"]["hits"]中找到返回结果的列表。然后,解析结果对象以获取所需的id字段。例如,resp["hits"]["hits"][0]["_source"]["id"]会为您提供id字段。

查看此处的文档https://www.elastic.co/guide/en/elasticsearch/reference/current/_the_search_api.html