文章目录

  • 概述
  • 官网
  • 示例
    • 模拟数据
    • 需求一: 按照评论日期进行bucket划分,然后拿到每个月的评论的评分的平均值
    • 需求二: 以年龄 10岁一个划分,看下都有哪些tag
    • reverse_nested


概述

继续跟中华石杉老师学习ES,第59篇

课程地址: https://www.roncoo.com/view/55


官网

Nested Aggregation:戳这里




示例

基于白话Elasticsearch58-数据建模实战_基于nested object实现博客与评论嵌套关系的数据

模拟数据

DELETE websitePUT /website
{"mappings": {"blogs": {"properties": {"comments": {"type": "nested", "properties": {"name":    { "type": "text"  },"comment": { "type": "text"  },"age":     { "type": "short"   },"stars":   { "type": "short"   },"date":    { "type": "date"    }}}}}}
}PUT /website/blogs/1
{"title": "花无缺发表的一篇帖子","content": "我是花无缺,大家要不要考虑一下投资房产和买股票的事情啊。。。","tags": ["投资","理财"],"comments": [{"name": "小鱼儿","comment": "什么股票啊?推荐一下呗","age": 28,"stars": 4,"date": "2016-09-01"},{"name": "黄药师","comment": "我喜欢投资房产,风,险大收益也大","age": 31,"stars": 5,"date": "2016-10-22"}]
}PUT /website/blogs/2
{"title": "2花无缺发表的一篇帖子","content": "2我是花无缺,大家要不要考虑一下投资房产和买股票的事情啊。。。","tags": ["房产","金融"],"comments": [{"name": "2小鱼儿","comment": "2什么股票啊?推荐一下呗","age": 44,"stars": 4,"date": "2016-09-01"},{"name": "2黄药师","comment": "2我喜欢投资房产,风,险大收益也大","age": 55,"stars": 5,"date": "2016-10-22"}]
}PUT /website/blogs/3
{"title": "3花无缺发表的一篇帖子","content": "3我是花无缺,大家要不要考虑一下投资房产和买股票的事情啊。。。","tags": ["房产","金融"],"comments": [{"name": "3小鱼儿","comment": "3什么股票啊?推荐一下呗","age": 43,"stars": 4,"date": "2016-09-01"},{"name": "3黄药师","comment": "2我喜欢投资房产,风,险大收益也大","age": 76,"stars": 5,"date": "2016-10-22"}]
}

#查看mapping
GET /website/_mapping/blogs/{"website": {"mappings": {"blogs": {"properties": {"comments": {"type": "nested","properties": {"age": {"type": "short"},"comment": {"type": "text"},"date": {"type": "date"},"name": {"type": "text"},"stars": {"type": "short"}}},"content": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"tags": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"title": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}}}}}}
}

需求一: 按照评论日期进行bucket划分,然后拿到每个月的评论的评分的平均值


GET /website/blogs/_search
{"size": 0, "aggs": {"comments_path": {"nested": {"path": "comments"}, "aggs": {"group_by_comments_date": {"date_histogram": {"field": "comments.date","interval": "month","format": "yyyy-MM"},"aggs": {"avg_stars": {"avg": {"field": "comments.stars"}}}}}}}
}

返回:


需求二: 以年龄 10岁一个划分,看下都有哪些tag

reverse_nested

DSL:

GET /website/blogs/_search
{"size": 0,"aggs": {"comments_path": {"nested": {"path": "comments"},"aggs": {"group_by_comments_age": {"histogram": {"field": "comments.age","interval": 10,"min_doc_count": 1},"aggs": {"reverse_path": {"reverse_nested": {}, "aggs": {"group_by_tags": {"terms": {"field": "tags.keyword"}}}}}}}}}
}

返回:

 {"took": 5,"timed_out": false,"_shards": {"total": 5,"successful": 5,"skipped": 0,"failed": 0},"hits": {"total": 3,"max_score": 0,"hits": []},"aggregations": {"comments_path": {"doc_count": 6,"group_by_comments_age": {"buckets": [{"key": 20,"doc_count": 1,"reverse_path": {"doc_count": 1,"group_by_tags": {"doc_count_error_upper_bound": 0,"sum_other_doc_count": 0,"buckets": [{"key": "投资","doc_count": 1},{"key": "理财","doc_count": 1}]}}},{"key": 30,"doc_count": 1,"reverse_path": {"doc_count": 1,"group_by_tags": {"doc_count_error_upper_bound": 0,"sum_other_doc_count": 0,"buckets": [{"key": "投资","doc_count": 1},{"key": "理财","doc_count": 1}]}}},{"key": 40,"doc_count": 2,"reverse_path": {"doc_count": 2,"group_by_tags": {"doc_count_error_upper_bound": 0,"sum_other_doc_count": 0,"buckets": [{"key": "房产","doc_count": 2},{"key": "金融","doc_count": 2}]}}},{"key": 50,"doc_count": 1,"reverse_path": {"doc_count": 1,"group_by_tags": {"doc_count_error_upper_bound": 0,"sum_other_doc_count": 0,"buckets": [{"key": "房产","doc_count": 1},{"key": "金融","doc_count": 1}]}}},{"key": 70,"doc_count": 1,"reverse_path": {"doc_count": 1,"group_by_tags": {"doc_count_error_upper_bound": 0,"sum_other_doc_count": 0,"buckets": [{"key": "房产","doc_count": 1},{"key": "金融","doc_count": 1}]}}}]}}}
}

reverse_nested

reverse_nested : 戳这里

简单来说:基于nested object 下钻的聚合里面,可以用上它外面的field

比如下面的 nested 字段是 comments

 "nested": {"path": "comments"}

我们想取tags 字段,这个时候就需要使用 reverse_nested

以下用6.4的版本演示

PUT /issues
{"mappings": {"issue": {"properties": {"tags": {"type": "keyword"},"comments": {"type": "nested","properties": {"username": {"type": "keyword"},"comment": {"type": "text"}}}}}}
}GET /issues/_search
{"query": {"match_all": {}},"aggs": {"comments": {"nested": {"path": "comments"},"aggs": {"top_usernames": {"terms": {"field": "comments.username"},"aggs": {"comment_to_issue": {"reverse_nested": {}, "aggs": {"top_tags_per_comment": {"terms": {"field": "tags"}}}}}}}}}
}

白话Elasticsearch59-数据建模实战_ Nested Aggregation/ Reverse nested Aggregation对嵌套的博客评论数据进行聚合分析相关推荐

  1. 白话Elasticsearch58-数据建模实战_基于nested object实现博客与评论嵌套关系

    文章目录 概述 官网 示例 Object datatype 让ES自动创建索引,插入一条数据 查看mapping 需求: 被年龄是28岁的黄药师评论过的博客 查询结果不对原因分析 Nested dat ...

  2. Python开发爬虫之动态网页抓取篇:爬取博客评论数据——通过浏览器审查元素解析真实网页地址...

    由于主流网站都使用JavaScript展示网页内容,和前面简单抓取静态网页不同的是,在使用JavaScript时,很多内容并不会出现在HTML源代码中,而是在HTML源码位置放上一段JavaScrip ...

  3. python动态页面元素爬取_Python开发爬虫之动态网页抓取篇:爬取博客评论数据——通过浏览器审查元素解析真实网页地址...

    由于主流网站都使用JavaScript展示网页内容,和前面简单抓取静态网页不同的是,在使用JavaScript时,很多内容并不会出现在HTML源代码中,而是在HTML源码位置放上一段JavaScrip ...

  4. python 爬虫动态网页的区别_Python开发爬虫之动态网页抓取篇:爬取博客评论数据——通过Selenium模拟浏览器抓取...

    区别于上篇动态网页抓取,这里介绍另一种方法,即使用浏览器渲染引擎.直接用浏览器在显示网页时解析 HTML.应用 CSS 样式并执行 JavaScript 的语句. 这个方法在爬虫过程中会打开一个浏览器 ...

  5. 白话Elasticsearch60-数据建模实战_Join datatype 父子关系数据建模

    文章目录 概述 官网 示例 概述 继续跟中华石杉老师学习ES,第60篇 课程地址: https://www.roncoo.com/view/55 白话Elasticsearch58-数据建模实战_基于 ...

  6. 『Python开发实战菜鸟教程』实战篇:爬虫快速入门——统计分析CSDN与博客园博客阅读数据

    文章目录 0x01:引子 首先介绍一下网络爬虫是什么,可以用来做什么? 这里简单探讨一下网络爬虫的合法性 正式进入爬虫实战前,需要我们了解下网页结构 HTML CSS JScript 写一个简单的 H ...

  7. Python爬虫-CSDN博客排行榜数据爬取

    文章目录 前言 网络爬虫 搜索引擎 爬虫应用 谨防违法 爬虫实战 网页分析 编写代码 运行效果 反爬技术 前言 开始接触 CTF 网络安全比赛发现不会写 Python 脚本的话简直寸步难行--故丢弃 ...

  8. Python采集CSDN博客排行榜数据

    文章目录 前言 网络爬虫 搜索引擎 爬虫应用 谨防违法 爬虫实战 网页分析 编写代码 运行效果 反爬技术 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在 ...

  9. java 使用webmagic 爬虫框架爬取博客园数据

    java 使用webmagic 爬虫框架爬取博客园数据存入数据库 学习记录   webmagic简介: WebMagic是一个简单灵活的Java爬虫框架.你可以快速开发出一个高效.易维护的爬虫. ht ...

  10. 博客统计:腾讯分析这些数据哪儿来的?

    站长统计是很多网站最常用功能,很多站长需要跟踪自己网站的访问和转化情况,于是站长统计就是一个非常直观和方便的工具,统计工具之前在做实验室的网站中用过百度统计和CNZZ,后来做论坛的时候发现Discuz ...

最新文章

  1. HDU 2561 第二小整数
  2. Tensorflow基础入门十大操作总结
  3. 【php数组函数序列】之array_combine() - 数组合并
  4. 编码练习——Java-String-API-练习
  5. SQL Server中如何取得刚插入的标识值
  6. java opencv 开发环境_在IntelliJ IDEA 13中配置OpenCV的Java开发环境
  7. 【slowfast复现 训练】训练过程 制作ava数据集 复现 SlowFast Networks for Video Recognition 训练 train
  8. java二维数组的遍历
  9. LOJ10157——皇宫看守(树形DP)
  10. dll注入的一种方式
  11. 七、MySQL中的字符集 - 系统的撸一遍MySQL
  12. Atitit 人员评价能力模型 目录 1.1. 深度、大局观、 1 1.2. 影响力, 影响力 分享 1 1.3. 业务洞察力 价值识别 1 1.4. 视野 战略和人才 专业 1 1.5.
  13. triu matlab,matlab triu
  14. 利用checked实现收藏按钮红心的显示与隐藏
  15. 面试经历(纯属个人经历,仅供观看参考)
  16. setTimeout运行机制
  17. 『现学现忘』Docker相关概念 — 1、云计算概念
  18. “没有定义根文件系统,请回到分区菜单以修正此错误”
  19. python中小写字母和数字用什么表示_Python – 检查数字,大写,小写字母和特殊字符的输入...
  20. Java 8 新特性 lambda表达式

热门文章

  1. java自动发送qq_如何定时批量发送qq消息就是帮助我们自动的发送qq消息
  2. 高中电子技术——万用表的表笔接法(指针式和数字式)
  3. Java SE学习笔记
  4. BZOJ1023 [SHOI2008]cactus仙人掌图
  5. DeepLearning花书阅读记录(1)
  6. 高精度模数转换器,MS1112,ADS1112
  7. 树莓派控制PCF8591 AD/DA模块
  8. 永磁同步电机的矢量控制策略(八)一一一仿真模型搭建与源代码
  9. 群晖 Docker加速方案
  10. 女性内分泌失调要小心