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 类型数组中的所有元素

Elasticsearch:获取 nested 类型数组中的所有元素

理解elasticsearch的parent-child关系