在elasticsearch中es支持对存储文档进行复杂的统计.简称聚合。

ES中的聚合被分为两大类。

1、Metrics, Metrics 是简单的对过滤出来的数据集进行avg,max等操作,是一个单一的数值。

2、ucket, Bucket 你则可以理解为将过滤出来的数据集按条件分成多个小数据集,然后Metrics会分别作用在这些小数据集上。

聚合在ELK里面是一个非常重要的概念,虽然我们在ELK stack里面用于过多的去了解es的实现过程,但是简单的了解es的查询过程,可以有效的帮助我们快速的入门Kibana,通过kibana鼠标点击的方式生成聚合数据。

1、 git先下载数据导入:

git clone git@github.com:xiaoluoge11/longguo-devops.git

执行脚本:

[root@controller longguo-devops]# ./car.sh

#备注:我们会建立一个也许对汽车交易商有所用处的聚合。数据是关于汽车交易的:汽车型号,制造商,销售价格,销售时间以及一些其他的相关数据

Bucket:

1、 按时间统计(可以是一个时间区间的柱形图date_histogram:kibana这样展示):

[root@controller .ssh]# curl -XGET '192.168.63.235:9200/cars/transactions/_search?pretty' -d '

{

"aggs" : {

"articles_over_time" : {

"date_histogram" : {

"field" : "sold",

"interval": "month"   ##区间可以为:data.hour,munite,year等

}

}

}

}'

返回结果:

"aggregations" : {

"articles_over_time" : {

"buckets" : [

{

"key_as_string" : "2014-01-01T00:00:00.000Z",

"key" : 1388534400000,

"doc_count" : 1

},

{

"key_as_string" : "2014-02-01T00:00:00.000Z",

"key" : 1391212800000,

"doc_count" : 1

},

#####也可以这样指定:

"field" : "sold",

"interval" : "mount",

"format" : "yyyy-MM-dd"  ###指定相应的时间格式

"offset":    "+6h"    ###区间间隔

####或者按照时间区间来查询:

"aggs": {

"range": {

"date_range": {

"field": "date",

"time_zone": "CET",

"ranges": [

{ "to": "2016-02-15/d" },

{ "from": "2016-02-15/d", "to" : "now/d" },

{ "from": "now/d" },

2、 返回价格区间柱形图(Histogram Aggregation):

[root@controller .ssh]# curl -XGET '192.168.63.235:9200/cars/transactions/_search?pretty' -d '

{

"aggs" : {

"prices" : {

"histogram" : {

"field" : "price",

"interval" : 5000

}

}

}

}'

### Histogram做等间距划分,统计区间的price值,看他落在那个区间,数据间隔是5000:

返回结果:

"aggregations" : {

"prices" : {

"buckets" : [

{

"key" : 10000.0,

"doc_count" : 2

},

{

"key" : 15000.0,

"doc_count" : 1

},

3、 查看每种颜色的销量:

[root@controller .ssh]# curl -XGET '192.168.63.235:9200/cars/transactions/_search?pretty' -d '

{

"aggs" : {

"genres" : {

"terms" : { "field" : "color" }

}

}

}'

###注意可能会报如下错:

"reason" : "Fielddata is disabled on text fields by default. Set fielddata=true on [color] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory."

提示我们数据类型不对,我们修改一下mapping映射:

[root@controller .ssh]# curl -XPUT '192.168.63.235:9200/cars/_mapping/transactions' -d  '

> {

>   "properties": {

>     "color": {

>       "type": "text",

>       "fielddata": true

>      }

>    }

> }'

{"acknowledged":true}

再查下就会看到统计分布的结果:

"buckets" : [

{

"key" : "red",

"doc_count" : 4

},

{

"key" : "blue",

"doc_count" : 2

},

{

"key" : "green",

"doc_count" : 2

}

4、 添加一个指标(Metric):

[root@controller .ssh]# curl -XGET '192.168.63.235:9200/cars/transactions/_search?pretty' -d '

{

"aggs" : {

"genres" : {

"terms" : { "field" : "color" }

,

"aggs": {

"avg_price": {

"avg": {

"field": "price"

}

}

}

}

}

}'

####avg可以换成max,min,sum等。用stats就表示所有。

5、  用stats找出Metric的所有值。

curl -XGET '192.168.63.235:9200/cars/transactions/_search?pretty' -d '

{

"aggs" : {

"genres" : {

"terms" : { "field" : "color" }

,

"aggs": {

"avg_price": {

"stats": {

"field": "price"

}

}

}

}

}

}'

####返回结果:

"buckets" : [

{

"key" : "red",

"doc_count" : 4,

"avg_price" : {

"count" : 4,

"min" : 10000.0,

"max" : 80000.0,

"avg" : 32500.0,

"sum" : 130000.0

}

}

本文内容出自:日志分析之 ELK stack 实战 课程学习笔记

ELK 聚合查询的更多相关文章

  1. python操作mongodb之二聚合查询

    #聚合查询 from pymongo import MongoClient db = MongoClient('mongodb://10.0.0.9:27017/').aggregation_exam ...

  2. crm使用FetchXml聚合查询

    /* 创建者:菜刀居士的博客  * 创建日期:2014年07月08号  */ namespace Net.CRM.FetchXml {     using System;     using Micr ...

  3. [SQL基础教程] 3-1 对表进行聚合查询

    [SQL基础教程] 3-1 对表进行聚合查询 聚合函数 用于合计的函数称为聚合函数或者集合函数 COUNT SUM AVG MAX MIN SELECT COUNT(*) FROM table; SE ...

  4. 开发中使用mongoTemplate进行Aggregation聚合查询

    笔记:使用mongo聚合查询(一开始根本没接触过mongo,一点一点慢慢的查资料完成了工作需求) 需求:在订单表中,根据buyerNick分组,统计每个buyerNick的电话.地址.支付总金额以及总 ...

  5. mongodb高级聚合查询

    在工作中会经常遇到一些mongodb的聚合操作,特此总结下.mongo存储的可以是复杂类型,比如数组.对象等mysql不善于处理的文档型结构,并且聚合的操作也比mysql复杂很多. 注:本文基于 mo ...

  6. ThinkPHP 数据库操作(四) : 聚合查询、时间查询、高级查询

    聚合查询 在应用中我们经常会用到一些统计数据,例如当前所有(或者满足某些条件)的用户数.所有用户的最大积分.用户的平均成绩等等,ThinkPHP为这些统计操作提供了一系列的内置方法,包括: 用法示例: ...

  7. ElasticSearch 6.2 Mapping参数说明及text类型字段聚合查询配置

    背景: 由于本人使用的是6.0以上的版本es,在使用发现很多中文博客对于mapping参数的说明已过时.ES6.0以后有很多参数变化. 现我根据官网总结mapping最新的参数,希望能对大家有用处. ...

  8. orm分组,聚合查询,执行原生sql语句

    from django.db.models import Avg from app01 import models annotate:(聚合查询) ret=models.Article.objects ...

  9. Django-model聚合查询与分组查询

    Django-model聚合查询与分组查询 聚合函数包含:SUM AVG MIN MAX COUNT 聚合函数可以单独使用,不一定要和分组配合使用:不过聚合函数一般和group by 搭配使用 agg ...

随机推荐

  1. CodeForces - 789D Weird journey

    D. Weird journey time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...

  2. Django day14(二) Session

     Session 1. Session干什么用的? 解决cookie不安全的问题, 2. 原理是: 1) 存在服务器上的键值对{'sdaf随机字符串':{name:prince,pwd:123}} 2 ...

  3. Spring-Boot配置文件数据源配置项

    Spring-Boot配置文件数据源配置项(常用配置项为红色) 参数 介绍 spring.datasource.continue-on-error = false 初始化数据库时发生错误时,请勿停止 ...

  4. php获取当地时间 time zone

      PHP5.2.4之前的版本无需设置时区.下面是修改PHP时区的三个办法. 1.修改PHP.ini这个文件 找到date.timezone这行,去掉前面的分号,改成: Java代码 date.tim ...

  5. javascript事件绑定1-模拟jquery可爱的东西

    1.给对象添加事件attachEvent(兼容IE,不兼容ff.chrome) <html xmlns="http://www.w3.org/1999/xhtml"> ...

  6. 从Hive1.0升级到Hive2.0(删除hive1.x中的元数据, 并不是数据迁移)

    软件环境: linux系统: CentOS6.7 Hadoop版本: 2.6.5 zookeeper版本: 3.4.8 主机配置: 一共m1, m2, m3这五部机, 每部主机的用户名都为centos ...

  7. 课上练习 script

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. dubbo之分组聚合

    按组合并返回结果 ,比如菜单服务,接口一样,但有多种实现,用group区分,现在消费方需从每种group中调用一次返回结果,合并结果返回,这样就可以实现聚合菜单项. 相关代码可以参考 dubbo 项目 ...

  9. js-undefinde的一点延伸

    前面写过一篇js中变量定义的问题:Js中判断变量存不存在的问题 本文再补充下,变量声明未初始化的情况,代码: <script> var a; alert(a==undefined)//tr ...

  10. canvas画弧线

    arc(x, y, radius, startRad, endRad, [anticlockwise]) 在Canvas画布上绘制以坐标点(x,y)为圆心.半么为radius的圆上的一段弧线.这段弧线 ...