elasticsearch 条件去重_elasticsearch 笔记四 之聚合查询之去重计数、基础统计、百分位、字符串统计...

这一节笔记还是聚合查询,以下是本节目录:去重统计 cardinality

基础统计 stats

百分位 percentiles

字符串统计 string_stats

1、去重统计 cardinality

去重统计,就是统计某个字段的值,去重后的数量。

先导入如下数据:

PUT /exam/_doc/1

{

"name" : "hunter",

"grade": 60

}

PUT /exam/_doc/2

{

"name" : "paul",

"grade": 80

}

PUT /exam/_doc/3

{

"name" : "jack",

"grade": 90

}

PUT /exam/_doc/4

{

"name" : "tom",

"grade": 90

}

执行下面的语句查询:

GET /exam/_search

{

"size": 0,

"aggs": {

"grade_dictinct_count": {

"cardinality": {

"field": "grade"

}

}

}

}

返回的结果主体:

"aggregations" : {

"grade_dictinct_count" : {

"value" : 3

}

}

因为在导入的数据中有两个 grade 是一样的值,所以返回的统计的去重后的数是 3

对应于 MySQL 中的语法是:

SELECT COUNT(DISTINCT grade) FROM table_name;

2、统计 stats

对数据进行一个简单的统计,一次性返回 总数、最大值、最小值、平均值、总和。

使用方法如下:

GET /bank/_search

{

"size": 0,

"aggs": {

"age_stats": {

"stats": {

"field": "age"

}

}

}

}

返回的结果:

"aggregations" : {

"age_stats" : {

"count" : 1000,

"min" : 20.0,

"max" : 40.0,

"avg" : 30.171,

"sum" : 30171.0

}

}

使用脚本:

也可以通过使用脚本的方式得到上面的结果:

GET /bank/_search

{

"size": 0,

"aggs": {

"agg_stats": {

"stats": {

"script": {

"lang": "painless",

"source": "doc['age'].value"

}

}

}

}

}

结果:

"aggregations" : {

"agg_stats" : {

"count" : 1000,

"min" : 20.0,

"max" : 40.0,

"avg" : 30.171,

"sum" : 30171.0

}

}

对返回的结果进行二次运算:

对返回的结果可以进行二次计算,实现比如对数据进行修正的功能

GET /bank/_search

{

"size": 0,

"aggs": {

"agg_stats": {

"stats": {

"field": "age",

"script": {

"lang": "painless",

"source": "_value * params.correction",

"params": {

"correction": 1.2

}

}

}

}

}

}

返回结果:

"aggregations" : {

"agg_stats" : {

"count" : 1000,

"min" : 24.0,

"max" : 48.0,

"avg" : 36.2052,

"sum" : 36205.2

}

}

可以看到,除了总数 count 没有变化,最大值最小值等,都在原基础上乘以; 1.2。

3、百分位 percentiles

使用这个查询方式会返回各百分位数据的值。

比如 age 这个字段,按照大小排序,在 99% 的地方的值是 40,使用方法如下:

GET /bank/_search

{

"size": 0,

"aggs": {

"age_percentiles": {

"percentiles": {

"field": "age"

}

}

}

}

返回结果是:

"aggregations" : {

"age_percentiles" : {

"values" : {

"1.0" : 20.0,

"5.0" : 21.0,

"25.0" : 25.0,

"50.0" : 31.0,

"75.0" : 35.0,

"95.0" : 39.0,

"99.0" : 40.0

}

}

}

结果会默认给定1, 5, 25, 50, 75, 95, 99 这几个百分位的值。

也可以自定义几个百分位:

GET /bank/_search

{

"size": 0,

"aggs": {

"age_percentiles": {

"percentiles": {

"field": "age",

"percents": [

1,

50,

95,

99,

99.5

]

}

}

}

}

就能返回自定的这些百分位的值。

前面返回的结果都是 百分位:age的值 我们也可以设置成 key-value 的形式,把 keyed 参数的值设置成 false 即可。

GET /bank/_search

{

"size": 0,

"aggs": {

"age_percentiles": {

"percentiles": {

"field": "age",

"keyed": false,

"percents": [

95,

99

]

}

}

}

}

值的反查 percentile_ranks:

前面我们是根据百分位去获取值,我们也可以根据值来获取所处的百分位,使用参数percentile_ranks。

GET /bank/_search

{

"size": 0,

"aggs": {

"age_percent_ranks": {

"percentile_ranks": {

"field": "age",

"values": [

35,

37,

40

]

}

}

}

}

返回结果:

"aggregations" : {

"age_percent_ranks" : {

"values" : {

"35.0" : 75.5,

"37.0" : 85.3,

"40.0" : 100.0

}

}

}

表示 age 值为 35、37、40 的分别处在数据里的这几个百分位。

4、字符串统计 string_stats

为了验证方便,我们还是用前面导入的 exam 这个 index。

对 name 这个字段进行统计,可以返回每条数据中 name 字段的最大长度,最小长度,平均长度等值:

使用方法如下:

GET /exam/_search

{

"size": 0,

"aggs": {

"message_stats": {

"string_stats": {

"field": "name.keyword"

}

}

}

}

设置show_distribution字段为 true 可以把字母统计的结果返回,使用方法如下:

GET /exam/_search

{

"size": 0,

"aggs": {

"name_stats": {

"string_stats": {

"field": "name.keyword",

"show_distribution": true

}

}

}

}

返回结果如下:

"aggregations" : {

"name_stats" : {

"count" : 4,

"min_length" : 3,

"max_length" : 6,

"avg_length" : 4.25,

"entropy" : 3.7345216647797517,

"distribution" : {

"a" : 0.11764705882352941,

"t" : 0.11764705882352941,

"u" : 0.11764705882352941,

"c" : 0.058823529411764705,

"e" : 0.058823529411764705,

"h" : 0.058823529411764705,

"j" : 0.058823529411764705,

"k" : 0.058823529411764705,

"l" : 0.058823529411764705,

"m" : 0.058823529411764705,

"n" : 0.058823529411764705,

"o" : 0.058823529411764705,

"p" : 0.058823529411764705,

"r" : 0.058823529411764705

}

}

}

以下是两种使用 script 的方法运行:

GET /exam/_search

{

"size": 0,

"aggs": {

"name_stats": {

"string_stats": {

"script": {

"lang": "painless",

"source": "doc['name.keyword'].value"

},

"show_distribution": true

}

}

}

}

另一种:

GET /exam/_search

{

"size": 0,

"aggs": {

"name_stats": {

"string_stats": {

"field": "name.keyword",

"script": {

"lang": "painless",

"source": "params.prefix + _value",

"params": {

"prefix": "name: "

}

}

}

}

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/365120.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

openstack基础环境

主机环境: centos7.5 ip:192.168.2.11 修改主机名,修改后主机名不得再更改 yum install chrony -y (控制节点和计算节点都要装)编辑 vi /etc/chrony.conf 文件,按照你环境的要求,对下面的键进行添加&#x…

Java内存模型又回来了

Java内存模型已经被遗忘了九年多了,但是大多数开放源代码Java支持者都希望对其进行现代化,并专注于并发,因为Java内存模型中引入的过程仅朝现代化迈出了一步 。 一个JEP(JDK增强建议),编号188 &#xff0c…

Redis缓存设计模式与失效策略

大家好,我是升仔 引言 Redis作为一个灵活的键值数据库,广泛用于实现高性能缓存解决方案。理解其缓存设计模式和失效策略对于开发高效、可靠的应用程序至关重要。 缓存设计模式 缓存 aside(旁路缓存): 基本原理:应用…

【Python 19】BMR计算器3.0(字符串分割与格式化输出)

1.案例描述 基础代谢率(BMR):我们安静状态下(通常为静卧状态)消耗的最低热量,人的其他活动都建立在这个基础上。 计算公式: BMR(男) (13.7*体重kg&#xff0…

经典案例:2012年最佳25个响应式网站设计作品《下篇》

2012年,响应式网站设计成为主流,这个概念由著名网页设计师 Ethan Marcotte 在2010年5月份提出,其目标是要让设计的网站能够响应用户的行为,根据不同终端设备自动调整尺寸。 响应式设计不再只是一个概念,众多大公司也把…

发布Akka Toolkit 2.3

最近宣布了Akka工具包 2.3.0版本的发布。 Akka是一个非常有用的工具包和运行时,用于在JVM上构建高度并发,分布式和容错的事件驱动应用程序。 它是分布式的,并提供了Actor,Future和STM等高级抽象。 它的新版本在2.2.0发布之后八个…

npm git 遇到的问题解决笔记

npm 报错 在无可奈何时可以试一试这个命令 npm cache clean --force commit 是如果报这样的错 删掉项目中.git/index.lock文件再commit即可解决问题 1.git config --global user.email xxx163.com 2.git config --global user.name xxx 3.ssh-keygen -t rsa -C xxx163.com(邮箱…

计算机技术应用广泛 属于科学计算方面的是,中国大学MOOC: 计算机技术应用广泛,以下属于科学计算方面的是哪个? 答案:火箭轨道计算...

相关问题端口的作用是什么?基于冰山模型的人才选拔模式,在应届生招聘、员工晋升等工作中都会应用,以下属于冰山模型中提到的考察因素的是创意的结果和过程不一定能够准确面对商业应用,创新则更需要( )和( )的保障。: 创意 结果 过…

新风系统风速推荐表_新风系统风速标准及与噪音的关系

原标题:新风系统风速标准及与噪音的关系如今,新风系统不仅能够对室内空气进行净化,还能够为室内提供源源不断的新鲜空气,真可谓空净产品的实力担当。新风系统不同于其它空气净化设备,只有进行合理的选择安装才能够更好…

Docverter – 文本文件轻松转换为 PDF,Docx 和 ePub 文件

Docverter 让你无需建立自己的文档转换工具就能够进行文件转换。Docverter 包装了几个开源项目,使您的文档能够进行完美的转换。借助一个简单的 HTTP API ,把使用 HTML,Markdown, 或者 LaTeX 编写的纯文本文件转换为 DOCX,PDF&…

MoreUnit与MoreUnit

就在一年多以前,我写了一篇关于在Eclipse中使用JUnit的文章。 评论者之一推荐MoreUnit ,以进一步提高测试效率。 尝试一下让我感到很高兴,并且我的自主神经系统立即记住了该插件的键盘快捷键…… 另外,在使用MoreUnit一段时间后&…

常见的虚拟机需要配置的服务

ssh服务:通过shell远程登录 ftp服务:通过ftp上传下载 samba服务:将磁盘映射到本地,一般调试可以代替ftp服务 nfs服务:目标板可以通过远程mount根文件系统,或者下载文件到目标板 转载于:https://www.cnblogs…

js html 导出word 不用activexobject,javascript下用ActiveXObject控件替换word书签,将内容导出到word后打印第2/2页...

javascript下用ActiveXObject控件替换word书签,将内容导出到word后打印第2/2页更新时间:2008年06月21日 22:57:31 作者:由于时间比较紧,没多的时候去学习研究上述工具包,现在用javascript操作ActiveXObject控件&…

平时二十三测

昨日AK, 今日垫底, 我简直是在坐过山车; 以后记住有返回值的函数一定要写返回值,不然全部输出0 题解: 第一题:全是-1, 是2^(n-1)-1,不会证,样例很明显; 对于有X个跟班的人&#xff0…

jlink怎么调试linux程序_纯Linux下的 ARM裸机调试环境搭建(GDB + JLink)

一直想摆脱windows环境,在纯linux下进行arm裸机开发,但是由于一直不知道JLink如何在linux下运行和配置,一直无法进行下去。以前都是windowsAXD调试。包括本人用的FL2440开发板和JLink调试器也没有提供在linux调试的文档。前些天由于想研究下U…

CSS3 实用技巧:制作三角形

您可能感兴趣的相关文章 2012年最酷的25个 CSS3 学习教程35个让人惊讶的 CSS3 动画效果演示推荐12个漂亮的 CSS3 按钮实现方案20个非常绚丽的 CSS3 特性应用演示24款非常实用的 CSS3 工具终极收藏 /* create an arrow that points up */div.arrow-up {width:0px; height:0px; b…

JArchitect v4.0发布

JArchitect v4.0 Released宣布了JArchitect版本4.0 。 JArchitect可以帮助Java开发人员管理复杂的Java代码库。 通过比较不同版本的代码,您可以轻松分析代码结构,指定设计规则,进行有效的代码审查并掌握演变。 在2012年9月发布的先前版本v3.…

MySql 踩坑小记

MySql 踩坑一时爽,一直踩啊一直爽...以下记录刚踩的三个坑,emmm... 首先是远程机子上创建表错误(踩第一个坑),于是将本地机器 MySql 版本回退至和远程一致(踩第二个坑),最后在第二个坑里踩到了第三个坑。Sequelize 创建表报错针对…

全国计算机一级知识题及答案解析,全国计算机等级考试一级试题库大全完整版附参考答案...

21.Windows 操作系统是一个( )。AA、单用户多任务操作系统 B、单用户单任务操作系统 C、多用户单任务操作系统 D、多用户多任务操作系统22.设Windows桌面上已经有某应用程序的图标,要运行该程序,可以( )。CA、用鼠标左键单击该图标…

20181103_C#线程初探, BeginInvoke_EndInvoke

在C#中学习多线程之前, 必须要深刻的理解委托; 基本上所有的多线程都在靠委托来完成 一. 进程和线程: a) 进程和线程都是计算机的概念, 跟程序语言没有任何关系 b) 进程和线程都属于计算机操作系统自身控制和调度, 程序语言只有使用的份, 最终的控制权还是得操作系统说了算, …