开发者社区> 工程师甲> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Join 数据类型—Elastic Stack 实战手册

简介: Join 类型是一种特殊的数据类型,类似父子结构,一个子文档只能有一个父文档,一个父文档可以有多个子文档。
+关注继续查看

970X90.png

· 更多精彩内容,请下载阅读全本《Elastic Stack实战手册》

· 加入创作人行列,一起交流碰撞,参与技术圈年度盛事吧

创作人:李增胜

Join 类型是一种特殊的数据类型,类似父子结构,一个子文档只能有一个父文档,一个父文档可以有多个子文档。

使用场景

Join 可以实现父子文档的关系存储,在什么情况下使用 Join 类型呢?假设我们存在这种场景,售卖的商品有评价信息,商品信息不会经常发生变更,但是评论信息就更新的比较频繁了,此时就可以使用 Join 数据类型来处理此种业务, 一对多关系存在多个文档中,父子文档更新性能高,可独立更新,互不影响。

在实际使用场景中,推荐使用 Data denormalization 来解决过多关联查询问题,字面解读就是”非规范化存储”,通过冗余存储多字段来达到过多关联的查询问题,避免使用 Join 数据类型,虽然带来了关联的方便性,但是会带来额外的查询开销影响搜索性能。

此外,Kibana 对 Join 以及 Nested 的支持也比较少

#定义索引,my_goods_sale 为售卖的商品信息,my_goods_comment 为商品的评价信息
PUT my_goods_hot_sale
{
  "mappings": {
    "properties": {
      "my_id": {
        "type": "keyword"
      },
      "my_join_field": { 
        "type": "join",
        "relations": {
          "my_goods_sale": "my_goods_comment" 
        }
      }
    }
  }
}

#添加商品售卖 ID 为1的信息
PUT my_goods_hot_sale/_doc/1?refresh
{
  "my_id": "1",
  "text": "This is a my_goods_sale",
  "my_join_field": {
    "name": "my_goods_sale" 
  }
}

#添加商品售卖 ID 为2的信息
PUT my_goods_hot_sale/_doc/2?refresh
{
  "my_id": "2",
  "text": "This is another my_goods_sale",
  "my_join_field": {
    "name": "my_goods_sale"
  }
}

#添加商品售卖 ID 为3,父商品为1,注意父子文档一定要在一个 shard 上
PUT my_goods_hot_sale/_doc/3?routing=1&refresh
{
  "my_id": "3",
  "text": "This is an comment",
  "my_join_field": {
    "name": "my_goods_comment", 
    "parent": "1" 
  }
}

#添加商品售卖 ID 为4,父商品为1
PUT my_goods_hot_sale/_doc/4?routing=1&refresh
{
  "my_id": "4",
  "text": "This is another comment",
  "my_join_field": {
    "name": "my_goods_comment",
    "parent": "1"
  }
}

根据父文档查询子文档

GET my_goods_hot_sale/_search
{
  "query": {
    "has_parent": {
      "parent_type": "my_goods_sale",
      "query": {
        "match": {
          "text": "my_goods_sale"
        }
      }
    }
  }
}

根据子文档查询父文档

GET my_goods_hot_sale/_search
{
  "query": {
    "has_child": {
      "type": "my_goods_comment",
      "query": {
        "match_all": {}
      }
    }
  }
}

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【 JavaSE 】 数据类型和运算符(三)
本文主要讲解: 掌握各种数据类型 变量作用域及命名和常量 类型转换及数值提升
29 0
Graph—Elastic Stack 实战手册
图作为一种现实中广泛存在的结构,与我们的生活息息相关,如社交网络、交通网络等。如何抽象的描述这些结构,并对其进行分析,获取潜在价值是一个普遍存在的问题。
331 0
Rollup—Elastic Stack 实战手册
汇总作业( rollup jobs )是周期性执行的任务,通过汇总作业,可以将某些索引中的数据进行周期性自定义化聚合,然后将聚合后的数据写入到新的索引中,整个流程叫做 Rollup 。
369 0
Search 通过 Kibana— Elastic Stack 实战手册
在 TO B 行业,对商品的搜索展示,是有一定业务要求的,例如:存在合作关系的买家和供应商才能看到供应商店铺的商品,不存在合作关系的买家则不展示商品。另外,有些商品对客户甲展示一种价格,对客户乙则展示另外一种价格,从而区分不同的会员、分组对商品价格的区别。
158 0
阿里云NFS NAS数据保护实战
背景 阿里云NAS存储是在阿里云上被广泛使用的存储服务,不管是出于合规要求还是数据保护需求,如何保护阿里云NAS存储当中的数据都尤为重要。 阿里云提供了混合云备份服务很好的解决了数据保护的需求。混合云备份服务不但能够提供自定义的数据保护策略,还能够自动扫描文件变化,进行增量备份大大的缩短了备份窗口。
5545 0
《Spark大数据分析实战》——导读
本节书摘来自华章社区《Spark大数据分析实战》一书中的目录,作者高彦杰 倪亚宇,更多章节内容可以访问云栖社区“华章社区”公众号查看
1840 0
+关注
工程师甲
搜索与推荐工程技术团队、阿里云Elasticsearch技术团队;
213
文章
4
问答
来源圈子
更多
相关文档: Elasticsearch
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载