前文回顾

之前讲完了探索ES-对象和嵌套对象(三),今天继续深入讲讲父子结构。

嵌套对象

上篇有讲到嵌套对象可以解决数组对象不能关联查询的问题。

但是,嵌套对象也有一些不足之处。

因为ES的文档是不可修改的,所以每次修改了子对象,都需要重新创建一个新的文档对象。这种实现方式会导致增大修改的开销。

那是不是有一种方式可以在修改子对象的时候,不会影响到父对象呢?

下面介绍的父子对象可以解决这个问题。

父子对象

我们先来看一下官网的例子。先来看一下mapping。

PUT my_index

{

"mappings": {

"_doc": {

"properties": {

"my_join_field": {

"type": "join",

"relations": {

"question": "answer"

}

}

}

}

}}

复制代码

从上面的mapping中可以看到父子节点的需要join类型来进行关联。与join类型同级别的还有relations属性,设置了父节点的名称和子节点的名称。

让我们看看父节点是如何插入的。

PUT my_index/_doc/1?refresh

{

"text": "This is a question",

"my_join_field": {

"name": "question"

}}

PUT my_index/_doc/2?refresh

{

"text": "This is another question",

"my_join_field": {

"name": "question"

}}

复制代码

可以看到在插入父节点,需要在my_join_field字段中用name字段来指定。

那么插入子节点呢?

PUT my_index/_doc/3?routing=1&refresh {

"text": "This is an answer",

"my_join_field": {

"name": "answer",

"parent": "1"

}}

PUT my_index/_doc/4?routing=1&refresh

{

"text": "This is another answer",

"my_join_field": {

"name": "answer",

"parent": "1"

}}

复制代码

可以看到和普通的文档有三点不同。

需要在join字段中指定name

需要在join字段中指定parent的id

需要加上routing字段

我们查询一下使用了父子节点的文档。得到如下所示数据。

{

"_index" : "my_index",

"_type" : "_doc",

"_id" : "1",

"_score" : 1.0,

"_source" : {

"text" : "This is a question",

"my_join_field" : {

"name" : "question"

}

}

},

{

"_index" : "my_index",

"_type" : "_doc",

"_id" : "3",

"_score" : 1.0,

"_routing" : "1",

"_source" : {

"text" : "This is an answer",

"my_join_field" : {

"name" : "answer",

"parent" : "1"

}

}

},

复制代码

可以看到无论在父节点还是在子节点中都存在一个join类型的字段。

父节点的join类型中包含了name,而子节点的join类型中包含了name和parent。

父子节点查询

那么如何查询特定父节点下面的子节点呢?可以使用parent_id查询。

GET my_index/_search

{

"query": {

"parent_id": {

"type": "answer",

"id": "1"

}

}

}

复制代码

在上面语句中用type指定了查询的是父节点还是子节点,用id表示需要查询哪一个parent下面的子节点。

得到如下两条记录。

"hits" : [

{

"_index" : "my_index",

"_type" : "_doc",

"_id" : "3",

"_score" : 0.13353139,

"_routing" : "1",

"_source" : {

"text" : "This is an answer",

"my_join_field" : {

"name" : "answer",

"parent" : "1"

}

}

},

{

"_index" : "my_index",

"_type" : "_doc",

"_id" : "4",

"_score" : 0.13353139,

"_routing" : "1",

"_source" : {

"text" : "This is another answer",

"my_join_field" : {

"name" : "answer",

"parent" : "1"

}

}

}

]

复制代码

关于写作

以后这里每天都会写一篇文章,题材不限,内容不限,字数不限。尽量把自己每天的思考都放入其中。

如果这篇文章给你带来了一些帮助,可以动动手指点个赞,顺便关注一波就更好了。

如果上面都没有,那么写下读完之后最想说的话?有效的反馈和你的鼓励是对我最大的帮助。

另外打算把博客给重新捡起来了。欢迎大家来访问吃西瓜。

我是shane。今天是2019年8月26日。百天写作计划的第三十三天,33/100。

es父子结构查询_探索ES-嵌套对象和父子对象(四)相关推荐

  1. es 根据_id查询_京东把 Elasticsearch 用得真牛逼!日均5亿订单查询完美解决

    来源:京东技术(ID: jingdongjishu) 京东到家订单中心系统业务中,无论是外部商家的订单生产,或是内部上下游系统的依赖,订单查询的调用量都非常大,造成了订单数据读多写少的情况. 我们把订 ...

  2. java中使用es精准查询_使用ES简单查询语句须知

    查询样例 {"query": { //1 "bool": { ///2 "must": [{ //3 "query_string& ...

  3. sql \n 查询_探索SQL查询提示选项(快速N)

    sql \n 查询 In this article, we will introduce SQL queries hint and will analyze the OPTION(Fast 'N') ...

  4. mysql连接与嵌套查询_数据库之嵌套查询与连接查询

    嵌套查询 单值嵌套查询 值返回结果是一个值的嵌套查询称为单值嵌套查询 对Sales数据库,列出市场部的所有员工的编号 USE Sale GO SELECT employee_id FROM emplo ...

  5. sql镶嵌查询_标准SQL嵌套查询语句

    展开全部 1.简单子查询62616964757a686964616fe78988e69d8331333433626530 select name,age from person where age & ...

  6. es父子结构查询_ES 父子文档查询

    父子文档的特点 1. 父/子文档是完全独立的. 2. 父文档更新不会影响子文档. 3. 子文档更新不会影响父文档或者其它子文档. 父子文档的映射与索引 1. 父子关系 type 的建立必须在索引新建或 ...

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

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

  8. hbase 查询_不用ES也能海量数据复杂查询秒回

    面对海量数据复杂查询场景,目前的主流选择是HBase搭配ElasticSearch或者直接用ElasitcSearch实现,本文提出一个新的解决方案,基于HBase实现更加轻量,无需增加硬件投入,我们 ...

  9. 父子结构查询_Java面试准备(5)之数据结构与算法——红黑树

    欢迎点赞评论+关注~~~~~~~ 如上图,二叉查找树极端情况下可能会变成一个单链表,这种查询时间复杂度就变成O(n)了,红黑树在二叉查找树的基础上进行了自平衡. 1.原理分析 如上图,红黑树具有以下特 ...

最新文章

  1. PCB天线无线模组如何布局摆放?
  2. ASP.NET MVC开发微信(四)
  3. [unreal4入门系列之十四] 在UE4中添加碰撞触发事件
  4. mysql修改数据库名字_mysql 数据库修改名字
  5. 分享.NET开发中经常用到的十大软件(转)
  6. 用信号量解决进程的同步与互斥
  7. P4564 [CTSC2018]假面(期望)
  8. treeset java_Java TreeSet iterator()方法与示例
  9. Python数模笔记-PuLP库(3)线性规划实例
  10. ssh连接虚拟机的linux_openstack系列之运维排障:虚拟机SSH连接失败
  11. Java虚拟机(一)——内存管理
  12. css滤镜使文字变3D效果
  13. 实用机器人设计(一)-机器人技术基础
  14. 【嵌入式】Libmodbus源码分析(四)-RTU相关函数分析
  15. 基于Arduino的智能环境监测与反馈系统
  16. matlab光学原理仿真应用衍射,光学衍射仿真实验系统
  17. 锯齿波调制的FMCW雷达中频回波信号的公式推导
  18. 为什么要进行WHQL微软徽标认证?
  19. 人工智能几行代码实现换脸
  20. 使用 Zipkin 和 Brave 实现分布式系统追踪(基础篇

热门文章

  1. 电子脑PHP动画制作,PS简单制作一个动态的字体动画
  2. 锐捷交换机系统安装与升级
  3. 远程DNS缓存攻击__网络攻防实验三
  4. 「GitChat新手引导」获奖名单公布,更多引导细节!
  5. 1.1机器学习和深度学习综述(百度架构师手把手带你零基础实践深度学习原版笔记系列)
  6. 默纳克万能协议服务器图片,默纳克MDKE6万能协议                        使用说明...
  7. 千兆工业交换机和百兆以太网交换机有什么区别?
  8. 关于以太网光纤收发器,逻辑隔离与物理隔离的理解与区别
  9. 第六十四章 Caché 函数大全 $STACK 函数
  10. 中国石斛行业渠道营销策略与发展态势研究报告2022版