parent-child可以将一个文档与其他文档相关联,类似于SQL中的一对多关系,一个parent可以有多个children,parent-child与nested相比有以下优点:

1.父文档的更新不需要重新为子文档重建索引

2.可以对子文档进行添加、更改或者删除操作而不会影响父文档或者其他的子文档

3.子文档可以被当做查询请求的结果返回

(不知道翻译的对不对)

parent-child映射

为了建立parent-child关系,需要在索引创建的时候指定父文档

假设一个公司company在各地有分公司branch,每个分公司的员工为employee,我们想将各个分公司的employee与对应的分公司brance相关联

首先来创建映射

创建company索引其中包含branch类型和employee类型

PUT /company
{"mappings": {"branch": {},"employee": {"_parent": {"type": "branch"}}}
}

employee中的_parent中的内容表示指定employee的parent为branch类型,也就是parent父文档为brance,它的child为employee

向branch中添加几条数据

POST /company/branch/_bulk
{ "index": { "_id": "London" }}
{ "name": "London Company ", "city": "London", "country": "UK" }
{ "index": { "_id": "Beijing" }}
{ "name": " Beijing Company", "city": "Beijing", "country": "CN" }
{ "index": { "_id": "Dalian" }}
{ "name": " Dalian Company ", "city": "Dalian", "country": "CN" }

接着向employe中添加一条数据,在插入数据的时候需要指定parent,也就是与brance类型中的id相关联,此处parent设为london,表示该员工与branch中id为London的文档相关连

PUT /company/employee/1?parent=London
{"name":  "Alice Smith","birth":   "1970-10-24","hobby": "hiking"
}

向employee批量插入一些数据

POST /company/employee/_bulk
{ "index": { "_id": 2, "parent": "Beijing" }}
{ "name": "Mark Thomas", "birth": "1989-05-16", "hobby": "diving" }
{ "index": { "_id": 3, "parent": "Beijing" }}
{ "name": "Barry Smith", "birth": "1987-03-01", "hobby": "hiking" }
{ "index": { "_id": 4, "parent": "Dalian" }}
{ "name": "Adrien Grand", "birth": "1990-05-11", "hobby": "horses" }

has_child查询

has_child查询可以基于子文档的内容从父文档中查询

假如想查询员工birth在1980-01-01之后的公司都有哪些

GET /company/branch/_search
{"query": {"has_child": {"type": "employee","query": {"range": {"birth": {"gte": "1980-01-01"}}}}}
}

查询结果如下,可以看出员工birth在1980-01-01之后的公司有Beijing 和Dalian

注:score_mode默认为none,此时将会忽略子文档的相关性得分并将父文档的得分设为1.0,我的理解就是为none的时候不计算相关性

has_parent查询

has_parent查询可以基于父文档的数据查询子文档

假如想查询country为CN的公司所有的员工信息

GET /company/employee/_search
{"query": {"has_parent": {"type": "branch", "query": {"match": {"country": "CN"}}}}
}

查询结果如下:

来自官方文档

https://www.elastic.co/guide/en/elasticsearch/guide/current/parent-child.html

parent-child 关系介绍相关推荐

  1. 在verp设置parent和child关系时,child object没有随着parent object变化的情况

    在verp中发现,设置parent和child关系时,child object没有随着parent object变化的情况: pickTarget=sim.getObjectHandle('pickT ...

  2. SSL与OpenSSL关系介绍

    SSL与OpenSSL关系介绍  OpenSSL简介 SSL是Secure Socket Layer(安全套接层协议)的缩写,可以在Internet上提供秘密性传输.Netscape公司在推出第一个W ...

  3. 多表关系介绍 mysql

    多表关系介绍 mysql 关注表与表之间的关系 一对一关系 一个人只有一个身份证 一个身份证只对应一个人 一对多关系(或者说 多对一关系) 一个部门有多个员工 一个员工只能对应一个部门 多对多关系 一 ...

  4. 课文电子计算机与多媒体减写,课文电子计算机与多媒体关系介绍

    主要内容: 本文简要地介绍了电子计算机的发明到多媒体的运用的基本情况,展示了电子计算机的飞速发展和灿烂前景.课文从美国史密森博物馆里存放的世界上第一台电子计算机写起,先概括地交代了电子计算机的飞速发展 ...

  5. 人物关系 人脸识别_内在美人物关系介绍图谱 - 电视剧 - 星关系

    <内在美>主要人物关系介绍 顶级巨星.通过上百张面孔诠释多样演技的"百面美人",同时也是一个麻烦制造者,绯闻制造机,走到哪儿都有闪光灯聚焦.然而就是这样一位巨星,却有着 ...

  6. jQuery中 parent child 与 ance desc 的区别

    jQuery中< parent > child >与< ance desc >的区别 (1)< ance desc > 使用$("ance desc ...

  7. 2021秋季《数据结构》_EOJ 1063.树的双亲存储法(parent+child / parent)

    题目 前面介绍了树的链式存储结构,那么如何用顺序存储来存储一棵树呢?在顺序存储时,我们除了存储每个结点值外,还要存储树中结点与结点之间的逻辑关系(即双亲与孩子结点之间的关系).下面介绍树的双亲存储法. ...

  8. es父子结构查询_elasticsearch 学习之父子关联查询 parent/child

    parent-child 关系 关联关系,可以为两个完全分开的文档,可以将一种文档类型以一对多的关系关联到另一个上 优点: 1.parent文档的更新不需要重新为子文档重建索引 2.对子文档进行添加, ...

  9. 车速与档位匹配关系_车速与档位不匹配后果,车速与档位的合理匹配关系介绍...

    对于汽车来说大家已经见怪不怪了,但是大家知道我国是什么时候才有的第一辆个车汽车的吗?是在1931年才拥有了第一辆国产汽车,在那个时候汽车简直就是富人才能享有的奢侈品.但是对于现在来说我们随处可见的汽车 ...

最新文章

  1. C#使用ICSharpCode.SharpZipLib.dll压缩文件夹和文件
  2. NoSuchMethodError和NoSuchMethodException 区别
  3. SQL查询最大值,返回整行数据
  4. 全文检索技术介绍与使用方法
  5. Emacs中的Color Theme以及字体设置
  6. 第4章 旋转的圆弧(《Python趣味创意编程》教学视频)
  7. 看到这个机器学习项目经历,面试官跟我聊嗨了
  8. 学习 SpringCloud 五大组件后的总结 一
  9. java fx combox,combobox – 带有FXML的组合框JavaFx
  10. xshell绿色版安装,无限制
  11. photoshop7.0绿色迷你免安装版
  12. 生活中的逻辑谬误03.滑坡谬误
  13. 2021走出数字化迷航,个体的获得感已成指路“灯塔”
  14. 2021年最牛福利!阿里巴巴社招面试真题惨遭外泄,现在全部分享给大家!
  15. android耳机上报流程,Android 耳机插入过程分析
  16. 嵌入式实践项目(二)——机房温度监控系统
  17. 15 条实用 Linux/Unix 磁带管理命令
  18. 管理学中的纳什均衡理论分享
  19. Cocos Creator—定制H5游戏首页loading界面 1
  20. 简单聊聊FPGA的一些参数

热门文章

  1. Java中获取GBK编码汉字的拼音首字母(包括生僻字)
  2. ASP .NET登录界面用户验证码代码
  3. 【后端结合】新程序猿笔记Day3
  4. 阿宝体育技术服务支持
  5. java mysql executequery_java - 无法使用executeQuery()发出数据操作语句
  6. java全自动生成krpano全景漫游
  7. 如何用漏斗模型做数据分析
  8. Angular断点调试
  9. 疫情反复下,5个营销动作让日化线下门店销量平稳微增
  10. 皓月 赠老婆 (机器生成的)