Elasticsearch父子文档关联技巧。

Elasticsearch中父子文档的关联:Join类型实现层级关系

在Elasticsearch中,处理具有层级关系的文档(如商品与评论、文章与回复)时,Join数据类型提供了一种高效的父子关系建模方式。通过Join类型,可以在同一索引中建立文档间的关联,同时保持查询性能。

Join数据类型的基本原理

Join类型是一种特殊的字段类型,允许在同一个索引中创建父子文档关系。父文档和子文档存储在同一个分片上,确保查询效率。其核心原理是通过以下两个元字段建立关联:

  • name:定义关系名称(如"question"和"answer")。
  • parent:子文档中指定父文档的ID。

示例映射定义:

PUT /forum
{
  "mappings": {
    "properties": {
      "post_id": { "type": "keyword" },
      "user": { "type": "keyword" },
      "content": { "type": "text" },
      "post_relation": {
        "type": "join",
        "relations": {
          "question": "answer"
        }
      }
    }
  }
}
父子文档的写入操作

父文档写入时需要声明关系类型。以下是插入问题(父文档)的示例:

PUT /forum/_doc/1
{
  "post_id": "1",
  "user": "user_a",
  "content": "如何优化Elasticsearch查询性能?",
  "post_relation": {
    "name": "question"
  }
}

子文档写入时必须指定父文档ID和路由值(确保与父文档同分片):

PUT /forum/_doc/2?routing=1
{
  "post_id": "2",
  "user": "user_b",
  "content": "可以使用过滤器缓存和分片查询优化",
  "post_relation": {
    "name": "answer",
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值