Elasticsearch 6.X 新类型Join深入详解

robinent
发布于 2022-4-29 11:34
浏览
0收藏

0、ES6.X 一对多、多对多的数据该如何存储和实现呢?


引出问题:

Elasticsearch 6.X 新类型Join深入详解-鸿蒙开发者社区

相信阅读本文,你就能得到答案!

 

1、ES6.X 新类型Join 产生背景


 •  Mysql中多表关联,我们可以通过left join 或者Join等实现;


 •  ES5.X版本,借助父子文档实现多表关联,类似数据库中Join的功能;实现的核心是借助于ES5.X支持1个索引(index)下多个类型(type)。

 

 •  ES6.X版本,由于每个索引下面只支持单一的类型(type)。

 

 •  所以,ES6.X版本如何实现Join成为大家关注的问题。


幸好,ES6.X新推出了Join类型,主要解决类似Mysql中多表关联的问题。

 

2、ES6.X Join类型介绍


仍然是一个索引下,借助父子关系,实现类似Mysql中多表关联的操作。

 

3、ES6.X Join类型实战


3.1 ES6.X Join类型 Mapping定义

Join类型的Mapping如下:

 

核心

 

 •  1) "my_join_field"为join的名称。
 •  2)"question": "answer" 指:qustion为answer的父类。
Elasticsearch 6.X 新类型Join深入详解-鸿蒙开发者社区3.2 ES6.X join类型定义父文档

Elasticsearch 6.X 新类型Join深入详解-鸿蒙开发者社区
如下,定义了两篇父文档。
文档类型为父类型:"question"。

Elasticsearch 6.X 新类型Join深入详解-鸿蒙开发者社区3.3 ES6.X join类型定义子文档

Elasticsearch 6.X 新类型Join深入详解-鸿蒙开发者社区4、ES6.X Join类型约束

Elasticsearch 6.X 新类型Join深入详解-鸿蒙开发者社区5、ES6.X Join类型检索与聚合


5.1 ES6.X Join全量检索

Elasticsearch 6.X 新类型Join深入详解-鸿蒙开发者社区返回结果如下:

Elasticsearch 6.X 新类型Join深入详解-鸿蒙开发者社区Elasticsearch 6.X 新类型Join深入详解-鸿蒙开发者社区5.2 ES6.X 基于父文档查找子文档

Elasticsearch 6.X 新类型Join深入详解-鸿蒙开发者社区返回结果:Elasticsearch 6.X 新类型Join深入详解-鸿蒙开发者社区5.3 ES6.X 基于子文档查找父文档

Elasticsearch 6.X 新类型Join深入详解-鸿蒙开发者社区

5.4 ES6.X Join聚合操作实战


以下操作含义如下:

 

 •  1)parent_id是特定的检索方式,用于检索属于特定父文档id=1的,子文档类型为answer的文档的个数。

 

 •  2)基于父文档类型question进行聚合;

 

 •  3)基于指定的field处理。
Elasticsearch 6.X 新类型Join深入详解-鸿蒙开发者社区返回结果:

Elasticsearch 6.X 新类型Join深入详解-鸿蒙开发者社区6、ES6.X Join 一对多实战


6.1 一对多定义

Elasticsearch 6.X 新类型Join深入详解-鸿蒙开发者社区6.2 一对多对多定义


实现如下图的祖孙三代关联关系的定义。

Elasticsearch 6.X 新类型Join深入详解-鸿蒙开发者社区

Elasticsearch 6.X 新类型Join深入详解-鸿蒙开发者社区

7、小结


虽然ES官方文档已经很详细了,详见:
http://t.cn/RnBBLgp

 

但手敲一遍,翻译一遍,的的确确会更新认知,加深理解。

分类
收藏
回复
举报
回复