Elasticsearch object nested join 数据类型
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Elasticsearch object nested join 数据类型相关的知识,希望对你有一定的参考价值。
参考技术A 在设计索引mapping时,在某些业务下,需要设计的对象中包含对象,俗称内部对象,此时就可以使用Object类型来存储对象.以下定义了店铺对象,包含店铺名称、店铺编码、供应商信息,另外供应商信息中又包含供应商编码、供应商名称。同时供应商信息还包含自身的对象属性所在区域,所在区域又包含省和市,这种定义才能满足查询店铺信息、查询供应商所有店铺信息,以及查询某地区的所有店铺信息等等场景。
2家供应商
南京农村电商领导者 店铺:苹果热销店铺+美的热销店铺
山东农村电商领导者 店铺:金沙酒热销店铺+华为热销店铺
查询供应商001对应的所有店铺:
Join 类型是一种特殊的类型,类似父子结构,一个子文档只能由一个父文档,一个父文档可以有多个子文档。
nested 是 object 的专用版本,允许对象数组以可以彼此独立查询的方式进行索引。
ES 中其实是没有内部对象的概念,因此它将对象层次结构简化为字段名称和值,以列表的形式展现。
首先来比较 nester 与 parent/child 以及 Object 的区别
以 B2B 电商行业的实际业务场景来举例说明,2B 行业的交易具有一定封闭性,只有签署合同、经常往来交易的会员往往有更高资格的交易权、议价权。
定义商品索引,其中 groupPrice 标识分组价对象,对象里面包含了 boxLevelPrice 分组价格、level 分组级别,当前端业务线搜索时,传入用户所在组级别,即可查询对应的价格。为了便于区分我们先定义为 Object 类型来观察下现象:
显然返回的数据不是我们期望的,这是因为 ES 中将 Object 数组打平了做存储导致
返回的是我们期望的,说明 nested 查询生效,解决了嵌套查询的问题
以上是关于Elasticsearch object nested join 数据类型的主要内容,如果未能解决你的问题,请参考以下文章
Elasticsearch es nested 嵌套类型 详解
Elasticsearch:如何修改 nested 字段的值
Elasticsearch:如何修改 nested 字段的值
Elasticsearch:获取 nested 类型数组中的所有元素