创作人:李增胜
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": {} }
TOP云 (west.cn)1月25日消息,近日,功夫贷宣布获得4000万人民币A轮融资,本轮...
背景 2020年9月16日 Snowflake成功IPO 交易首日市场估值达到704亿美元 募集资金3...
本文由网易云音乐实时计算平台研发工程师岳猛分享,主要从以下四个部分将为大家...
我们知道效能提升 就是要应用系统方法实践和工具 通过它们改进技术、工程能力和...
hk 域名 哪里注册? .hk域名 在国内是可以注册的,只要提供了.hk 域名注册 服务...
约束与限制 只有运行中的云服务器云主机才允许用户登录。 Windows操作系统用户名...
有很多人在听说大数据之后,会开始纠结JAVA与大数据的区别,甚至还在纠结Java和...
本文介绍了北京慧达天下如何使用运维编排OOS提高发布效率。 公司介绍 公司名称:...
作者 | 亮言 来源 | 阿里技术公众号 一 背景 订单状态流转是交易系统的最为核心...
描述 你正在和你的朋友玩 猜数字 (Bulls and Cows)游戏:你写下一个数字让你的朋...