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

本文详细介绍了Elasticsearch 6.x版本中为了解决多表关联问题而引入的新类型——Join。通过实战示例,讲解了Join类型在Mapping定义、父文档和子文档创建、检索与聚合操作中的应用,包括一对多和多对多的场景,帮助读者掌握如何在ES6.x中实现类似MySQL的Join操作。
摘要由CSDN通过智能技术生成

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

引出问题:

“某头条新闻APP”新闻内容和新闻评论是1对多的关系?

在ES6.X该如何存储、如何进行高效检索、聚合操作呢?

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

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的父类。

1PUT my_join_index
2{
3  "mappings": {
4    "_doc": {
5      "properties": {
6        "my_join_field": {
7          "type": "join",
8          "relations": {
9            "question": "answer"
10          }
11        }
12      }
13    }
14  }
15}

3.2 ES6.X join类型定义父文档

直接上以下简化的形式,更好理解些。

如下,定义了两篇父文档。
文档类型为父类型:"question"。

1PUT my_join_index/_doc/1?refresh
2{
3  "text": "This is a question",
4  "my_join_field": "question"
5}
6PUT my_join_index/_doc/2?refresh
7{
8  "text": "This is another question",
9  "my_join_field": "question"
10}

3.3 ES6.X join类型定义子文档

  • 路由值是强制性的,因为父文件和子文件必须在相同的分片上建立索引。

  • "answer"是此子文档的加入名称。

  • 指定此子文档的父文档ID:1。

1PUT my_join_index/_doc/3?routing=1&refresh
2{
3  "text": "This is an answer",
4  "my_join_field": {
5    "name": "answer",
6    "parent": "1"
7  }
8}
9PUT my_join_index/_doc/4?routing=1&refresh
10{
11  "text": "This is another answer",
12  "my_join_field&#
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值