Elasticsearch Java API(八)--搜索有相同父id的子文档

本文介绍如何在Elasticsearch中正确地搜索具有相同父ID的所有子文档,并提供了一个具体的例子,展示了使用curl命令和Java API实现这一目标的方法。

需求:

搜索具有相同父id的所有子文档.

数据:

   mapping:

    

 {
      "mappings": {
        "branch": {},
        "employee": {
          "_parent": {
            "type": "branch"
          }
        }
      }
   }

  父文档:

{ "index": { "_id": "london" }}
{ "name": "London Westminster", "city": "London", "country": "UK" }
{ "index": { "_id": "liverpool" }}
{ "name": "Liverpool Central", "city": "Liverpool", "country": "UK" }
{ "index": { "_id": "paris" }}
{ "name": "Champs Élysées", "city": "Paris", "country": "France" }
  子文档:

 

{ "index": { "_id": 1, "parent": "london" }}
{ "name": "Alice Smith", "dob": "1970-10-24", "hobby": "hiking" }

{ "index": { "_id": 2, "parent": "london" }}
{ "name": "Mark Thomas", "dob": "1982-05-16", "hobby": "diving" }

{ "index": { "_id": 3, "parent": "liverpool" }}
{ "name": "Barry Smith", "dob": "1979-04-01", "hobby": "hiking" }

{ "index": { "_id": 4, "parent": "paris" }}
{ "name": "Adrien Grand", "dob": "1987-05-11", "hobby": "horses" }

搜索父id为london的employee:


curl GET company/employee/_search
    "query":{
       "has_parent":{
         "type":"branch",
         "query":{
           "term":{
               "_parent":"london"
           }
         } 
       }
     }

}

这样搜没有搜到任何结果.各种尝试都没有成功,后来到stackoverflow上提问得到了答案,正确的搜索:



 
curl GET company/employee/_search
 
{
  "query": {
    "has_parent": {
      "type": "branch", 
      "query": {
        "ids": {
             "values" : ["london"]
        }
      }
    }
  }

对应的java api:

HasParentQueryBuilder hpqb=QueryBuilders.hasParentQuery("branch",QueryBuilders.idsQuery().ids("london"));


我在stackoverflow上的提问链接:how to search child documents with the same parent id in Elasticsearch?

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

esc_ai

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值