elastic search 之 join queries

本文介绍如何在Elasticsearch中使用join字段建立父子文档之间的关联,并通过具体示例展示了如何添加不同类型的文档以及如何查询特定父子关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


#第一步 在mapping中创建映射关系,
#映射字段名称为my-join-field
#类型为join
#映射关系为:
#父类型:parent
#子类型:child
PUT /my-index
{
  "mappings": {
    "properties": {
      "my-join-field": {
        "type": "join",
        "relations": {
          "parent": "child"
        }
      }
    }
  }
}

#添加父文档1
#指定文档类型"my-join-field":"parent"
PUT /my-index/_doc/parentId1?refresh
{
  "id":"parentId1",
  "name":"parent1",
  "my-join-field":"parent"
}

#添加父文档2
#指定文档类型"my-join-field":"parent"
PUT /my-index/_doc/parentId2?refresh
{
  "id":"parentId2",
  "name":"parent2",
  "my-join-field":"parent"
}

#添加子文档1
#指定文档类型和所属父id
#指定routing,父子文档必须在同一分片
PUT /my-index/_doc/childId1?routing=1&refresh
{
  "id":"childId1",
  "name":"child1",
  "my-join-field":{
    "name":"child",
    "parent": "parentId1"
  }
}


#添加子文档2
#指定文档类型和所属父id
PUT /my-index/_doc/childId2?routing=1&refresh
{
  "id":"childId2",
  "name":"child2",
  "my-join-field":{
    "name":"child",
    "parent": "parentId2"
  }
}

#添加子文档3
#指定文档类型和所属父id
PUT /my-index/_doc/childId3?routing=1&refresh
{
  "id":"childId3",
  "name":"child3",
  "my-join-field":{
    "name":"child",
    "parent": "parentId1"
  }
}

#查找child1的parent
GET /my-index/_search
{
  "query": {
    "has_child": {
      "type": "child",
      "query": {
        "term": {
          "name": {
            "value": "child1"
          }
        }
      }
    }
  }
}

#查找child1以及child1的parent
GET /my-index/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "bool": {
            "should": [
              {
                "has_child": {
                  "type": "child",
                  "query": {
                    "term": {
                      "name": {
                        "value": "child1"
                      }
                    }
                  },
                  "inner_hits": {
                    
                  }
                }
              }
            ]
          }
        }
      ]
    }
  }
}

#查找parent1的child
GET /my-index/_search
{
  "query": {
    "has_parent": {
      "parent_type": "parent",
      "query": {
        "term": {
          "name": {
            "value": "parent1"
          }
        }
      }
    }
  }
}

#根据parentId查找child
GET /my-index/_search
{
  "query": {
      "parent_id": {
          "type": "child",
          "id": "parentId1"
      }
  }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值