前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >ES中nest join

ES中nest join

作者头像
付威
发布于 2020-01-21 09:17:00
发布于 2020-01-21 09:17:00
83900
代码可运行
举报
运行总次数:0
代码可运行

nested 类型是一个特殊object数据类型,允许数组的object的字段可以被独立的查询出来。

数据类型是如何被封装的

在lucene中没有嵌套object的概念,所以ES的用一个简单的数据数据列表来表示一个复杂的层次数据实体,例如一个博客和评论的实体:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PUT  nesttest/_doc
{
    "blog_title": "开篇-es的nest的使用",
    "blog_content": "从本篇文章开始,我会分享给大家canvas绘制的各种基础图形和酷炫的图形",
    "tags": [
        "Java",
        "es"
    ],
    "hit_count": 5,
    "commet": [
        {
            "commet_user": "tom",
            "commet_content": "good Job",
            "commet_time": "2019-02-26",
             "commet_location": "beijing"
        },
        {
            "commet_user": "john",
            "commet_content": "clearly,tks",
            "commet_time": "2019-02-23"
            ,
             "commet_location": "shanghai"
        },
        {
            "commet_user": "lily",
            "commet_content": "it's too hard ",
            "commet_time": "2019-02-22"
           ,
             "commet_location": "shenzhen"
        }
    ],
    "create_time": "2019-02-26"
}

其中commet类型会被转化成一个数组的形式如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  ... 
  "commet.commet_user":["tom","john","lily"],
  ...
   "commet.commet_location":["beijing","shanghai","shenzhen"],
}

而当执行查询的时候:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GET nesttest/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { "commet.commet_user": "john" }},
        { "match": { "commet.commet_location":  "shenzhen" }}
      ]
    }
  }
}

发现查询结果如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
...
 
    "hits" : [
      {
        "_index" : "nest",
        "_type" : "_doc",
        "_id" : "pe0iKWkBulkJdQfMSgyV",
        "_score" : 0.5753642,
        "_source" : {
          "blog_title" : "2019-01-05",
          "blog_content" : "从本篇文章开始,我会分享给大家canvas绘制的各种基础图形和酷炫的图形",
          "tags" : [
            "Java",
            "es"
          ],
          "hit_count" : 5,
          "commet" : [
            {
              "commet_user" : "tom",
              "commet_content" : "good Job",
              "commet_time" : "2019-02-26",
              "commet_location" : "beijing"
            },
            {
              "commet_user" : "john",
              "commet_content" : "clearly,tks",
              "commet_time" : "2019-02-23",
              "commet_location" : "shanghai"
            },
            {
              "commet_user" : "lily",
              "commet_content" : "it's too hard ",
              "commet_time" : "2019-02-22",
              "commet_location" : "shenzhen"
            }
          ],
          "create_time" : "2019-02-26"
        }
      }
    ]
  }
}  

上面把所有的结果都列出来了, 但是 john的不在shenzhen啊?所以需要把commet定义为nested 类型。

定义nested类型
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PUT nest_new/_mapping/_doc
{
    "properties": {
        "blog_title": {
            "type": "text"
        },
        "blog_content": {
            "type": "text"
        },
        "tags": {
            "type": "keyword"
        },
        "hit_count": {
            "type": "keyword"
        },
        "commet": {
            "type": "nested",//这里
            "properties": {
                "commet_user": {
                    "type": "text"
                },
                "commet_content": {
                    "type": "text"
                },
                "commet_time": {
                    "type": "date"
                },
                "commet_location": {
                    "type": "keyword"
                }
            }
        },
        "create_time": {
            "type": "date"
        },
        "datachange_lasttime": {
            "format": "strict_date_optional_time||epoch_millis",
            "type": "date"
        }
    }
}

ES嵌套深度被限制在50层

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-02-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ES 7.8 速成笔记(中)
习惯于数据库开发的同学,自然最喜欢这种方式。为了方便讲解,先写一段代码,生成一堆记录
菩提树下的杨过
2020/07/21
5970
ES 7.8 速成笔记(中)
大数据预测CSDN2018博客之星评选结果
闲话不多说,我们直接用数据说话。(因为绝大多数同学都只是关心一下结果,后面再给大家演示数据是怎么得到的) 按照CSDN的要求:
我就是马云飞
2018/12/27
6990
大数据预测CSDN2018博客之星评选结果
MyBatis快速入门(二) 多表映射
这个例子比上面的单表映射复杂很多,首先数据表和实体类的属性并不是一一对应的,有些属性名称不同,还有一些外键在实体类中是类,而在数据表中只有主键ID,有些属性还是集合类型。
乐百川
2022/05/05
6180
实战Elasticsearch6的join类型
如上所示,id为1的记录,其relationship_type字段的值为"group",id为2的记录,relationship_type字段的值不是字符串,而是对象,parent为1表示父文档id为1,name为"event"表示父子关系是"group:event"类型;
程序员欣宸
2019/05/27
8290
hive学习笔记之四:分区表
本文是《hive学习笔记》系列的第四篇,要学习的是hive的分区表,简单来说hive的分区就是创建层级目录的一种方式,处于同一分区的记录其实就是数据在同一个子目录下,分区一共有两种:静态和动态,接下来逐一尝试;
程序员欣宸
2021/07/01
3520
hive学习笔记之四:分区表
Elasticsearch:inverted index,doc_values及source
这个几个概念分别指的是什么?有什么用处?如何配置它们?只有我们熟练地掌握了这些概念,我们才可以正确地使用它们。
腾讯云大数据
2020/09/29
1.3K0
Elasticsearch:inverted index,doc_values及source
curl在CDN排障中的常见用法
-I Show document info only 只展示headers,发起HEAD请求 -o Write output to file instead of stdout 保存到本地 -x 用这个option可以指定http访问所使用的proxy服务器及其端口 -v Make the operation more talkative 可以显示一次http通信的整个过程,包括端口连接和http -H Custom header to pass to server 添加header -A/–user-agent [string] 指定UA访问 -e, --referer URL 指定referer --resolve HOST:PORT:ADDRESS Force resolve of HOST:PORT to ADDRESS -X -d 这里的X是大写,-X POST发起POST请求
邪恶の大灰
2019/04/29
3.6K0
Python:Django搭建博客
注册完后,在项目根目录中(即 manage.py 所在的目录)创建 templates 文件夹,使用 pycharm 创建项目会自动帮我们创建
用户8832503
2021/08/20
5720
[1183]Clickhouse数据表&数据分区partition&数据生命周期操作
也可以直接去看官方文档:https://clickhouse.com/docs/zh/sql-reference/statements/alter/column
周小董
2023/10/10
1.6K0
search(16)- elastic4s-内嵌文件:nested and join
从SQL领域来的用户,对于ES的文件关系维护方式会感到很不习惯。毕竟,ES是分布式数据库只能高效处理独个扁平类型文件,无法支持关系式数据库那样的文件拼接。但是,任何数据库应用都无法避免树型文件关系,因为这是业务模式需要的表现形式。在ES里,无论nested或join类型的数据,父-子关系的数据文件实际上是放在同一个索引index里的。在ES里已经没有数据表(doc_type)的概念。但从操作层面上ES提供了relation类型来支持父-子数据关系操作。所以,nested数据类型一般用来表达比较固定的嵌入数据。因为每次更新都需要重新对文件进行一次索引。join类型的数据则可以对数据关系的两头分别独立进行更新,方便很多。
用户1150956
2020/05/26
6760
ES 复杂类型及其查询
现在需要统计作为为mark,文章内容为Elasticsearch的文档记录,代码如下:
郑小超.
2022/09/23
5270
ES 7.8 速成笔记(上)
下载地址: https://www.elastic.co/cn/downloads/elasticsearch (目前最新版本为7.8)
菩提树下的杨过
2020/07/21
7600
ES 7.8 速成笔记(上)
Hive 中的复合数据结构简介以及一些函数的用法说明
目前 hive 支持的复合数据类型有以下几种: map (key1, value1, key2, value2, ...) Creates a map with the given key/value pairs struct   (val1, val2, val3, ...) Creates a struct with the given field values. Struct field names will be col1, col2, ... named_struct   (name1,
用户1177713
2018/02/24
3.9K0
Hive 中的复合数据结构简介以及一些函数的用法说明
python 命令行抓取分析北上广深房价数据
昨天在老家,发布了一篇《python 自动抓取分析房价数据——安居客版》。在文末,第6小节提供了完整代码,可以在 python3 环境,通过命令行传入参数 cookie 自动抓取房价数据。今天回到深圳,才想到,这段脚本只能抓取西双版纳的房价数据,如果读者不自己修改,那么就无法抓取其他城市的房价数据。于是,决定“好事做到底,送佛送到西”,将脚本加以修改,以北上广深为例,提供灵活抓取分析其他城市房价的完整代码。
我是一条小青蛇
2019/10/23
7640
python 命令行抓取分析北上广深房价数据
基于skywalking数据绘制服务依赖关系并持久化存储
为了在某个服务告警的时候,更好的评估其影响面,想到了从skywalking中捞出这些关系,在告警推送的时候带上相关数据,这样做到心中有数。
保持热爱奔赴山海
2025/02/25
960
Real Computer Network
For the computer network, I believe that most people have learned it in the course of university or college. No matter whether you are familiar with it or not, this article will give you a different perspective of the network. It can really help you a lot.
timerring
2025/01/29
520
MyBatis初级实战之六:一对多关联查询
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本文是《MyBatis初级实战》系列的第六篇,继续实践从多表获取数据; 回顾上一篇,咱们实战了多表关联的一对一关系,如下图所示,查找日志记录时,把对应的用户信息查出: 本篇要实践的是一对多关系:查询用户记录时,把该用户的所有日志记录都查出来,逻辑关系如下图: 在具体编码实现一对多查询时,分别使用联表和嵌套两种方式实现,每
程序员欣宸
2022/05/06
7940
MyBatis初级实战之六:一对多关联查询
ES的常用查询与聚合
基于es 5.4和es 5.6,列举的是个人工作中经常用到的查询(只是工作中使用的是Java API),如果需要看完整的,可以参考官方相关文档 https://www.elastic.co/guide/en/elasticsearch/reference/5.4/search.html。
阿泽
2019/09/24
6.4K0
ES的常用查询与聚合
【ES三周年】elasticsearch 常用数据类型详解和范例
本篇文章主要讲解elasticsearch在业务中经常用到的字段类型,通过大量的范例来学习和理解不同字段类型的应用场景。范例elasticsearch使用的版本为7.17.5。
张同学tty
2023/04/08
3.9K0
【ES三周年】elasticsearch 常用数据类型详解和范例
Elasticsearch的Index和Mapping(二)
本文使用的Elasticsearch版本为6.5.4,基本命令以及操作大都通用。下面通过MySQL与Elasticsearch的对比图,让我们更好地理解接下来的增删改操作。
用户3467126
2020/02/25
2.8K0
Elasticsearch的Index和Mapping(二)
相关推荐
ES 7.8 速成笔记(中)
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文