es父子结构查询_探索ES-嵌套对象和父子对象(四)
前文回顾
之前讲完了探索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-嵌套对象和父子对象(四)相关推荐
- es 根据_id查询_京东把 Elasticsearch 用得真牛逼!日均5亿订单查询完美解决
来源:京东技术(ID: jingdongjishu) 京东到家订单中心系统业务中,无论是外部商家的订单生产,或是内部上下游系统的依赖,订单查询的调用量都非常大,造成了订单数据读多写少的情况. 我们把订 ...
- java中使用es精准查询_使用ES简单查询语句须知
查询样例 {"query": { //1 "bool": { ///2 "must": [{ //3 "query_string& ...
- sql \n 查询_探索SQL查询提示选项(快速N)
sql \n 查询 In this article, we will introduce SQL queries hint and will analyze the OPTION(Fast 'N') ...
- mysql连接与嵌套查询_数据库之嵌套查询与连接查询
嵌套查询 单值嵌套查询 值返回结果是一个值的嵌套查询称为单值嵌套查询 对Sales数据库,列出市场部的所有员工的编号 USE Sale GO SELECT employee_id FROM emplo ...
- sql镶嵌查询_标准SQL嵌套查询语句
展开全部 1.简单子查询62616964757a686964616fe78988e69d8331333433626530 select name,age from person where age & ...
- es父子结构查询_ES 父子文档查询
父子文档的特点 1. 父/子文档是完全独立的. 2. 父文档更新不会影响子文档. 3. 子文档更新不会影响父文档或者其它子文档. 父子文档的映射与索引 1. 父子关系 type 的建立必须在索引新建或 ...
- es父子结构查询_elasticsearch 学习之父子关联查询 parent/child
parent-child 关系 关联关系,可以为两个完全分开的文档,可以将一种文档类型以一对多的关系关联到另一个上 优点: 1.parent文档的更新不需要重新为子文档重建索引 2.对子文档进行添加, ...
- hbase 查询_不用ES也能海量数据复杂查询秒回
面对海量数据复杂查询场景,目前的主流选择是HBase搭配ElasticSearch或者直接用ElasitcSearch实现,本文提出一个新的解决方案,基于HBase实现更加轻量,无需增加硬件投入,我们 ...
- 父子结构查询_Java面试准备(5)之数据结构与算法——红黑树
欢迎点赞评论+关注~~~~~~~ 如上图,二叉查找树极端情况下可能会变成一个单链表,这种查询时间复杂度就变成O(n)了,红黑树在二叉查找树的基础上进行了自平衡. 1.原理分析 如上图,红黑树具有以下特 ...
最新文章
- PCB天线无线模组如何布局摆放?
- ASP.NET MVC开发微信(四)
- [unreal4入门系列之十四] 在UE4中添加碰撞触发事件
- mysql修改数据库名字_mysql 数据库修改名字
- 分享.NET开发中经常用到的十大软件(转)
- 用信号量解决进程的同步与互斥
- P4564 [CTSC2018]假面(期望)
- treeset java_Java TreeSet iterator()方法与示例
- Python数模笔记-PuLP库(3)线性规划实例
- ssh连接虚拟机的linux_openstack系列之运维排障:虚拟机SSH连接失败
- Java虚拟机(一)——内存管理
- css滤镜使文字变3D效果
- 实用机器人设计(一)-机器人技术基础
- 【嵌入式】Libmodbus源码分析(四)-RTU相关函数分析
- 基于Arduino的智能环境监测与反馈系统
- matlab光学原理仿真应用衍射,光学衍射仿真实验系统
- 锯齿波调制的FMCW雷达中频回波信号的公式推导
- 为什么要进行WHQL微软徽标认证?
- 人工智能几行代码实现换脸
- 使用 Zipkin 和 Brave 实现分布式系统追踪(基础篇
热门文章
- 电子脑PHP动画制作,PS简单制作一个动态的字体动画
- 锐捷交换机系统安装与升级
- 远程DNS缓存攻击__网络攻防实验三
- 「GitChat新手引导」获奖名单公布,更多引导细节!
- 1.1机器学习和深度学习综述(百度架构师手把手带你零基础实践深度学习原版笔记系列)
- 默纳克万能协议服务器图片,默纳克MDKE6万能协议 使用说明...
- 千兆工业交换机和百兆以太网交换机有什么区别?
- 关于以太网光纤收发器,逻辑隔离与物理隔离的理解与区别
- 第六十四章 Caché 函数大全 $STACK 函数
- 中国石斛行业渠道营销策略与发展态势研究报告2022版