• Elasticsearch聚合 Date Histogram聚合


    转 http://www.cnblogs.com/xing901022/p/4951603.html

     

    Elasticsearch的聚合主要分成两大类:metric和bucket,2.0中新增了pipeline还没有研究。本篇还是来介绍Bucket聚合中的常用聚合——date histogram.参考:官方文档

    用法

    Date histogram的用法与histogram差不多,只不过区间上支持了日期的表达式。

    {
    "aggs":{
        "articles_over_time":{
            "date_histogram":{
                "field":"date",
                "interval":"month"
                }
            }
        }
    }

    interval字段支持多种关键字:`year`, `quarter`, `month`, `week`, `day`, `hour`, `minute`, `second`

    当然也支持对这些关键字进行扩展使用,比如一个半小时可以定义成如下:

    {
        "aggs":{
            "articles_over_time":{
                "date_histogram":{
                    "field":"date",
                    "interval":"1.5h"
                    }
                }
            }
    }

    返回的结果可以通过设置format进行格式化:

    {
        "aggs":{
            "articles_over_time":{
                "date_histogram":{
                    "field":"date",
                    "interval":"1M",
                    "format":"yyyy-MM-dd"
                    }
                }
            }
        }

    得到的结果如下:

    {
        "aggregations":{
            "articles_over_time":{
                "buckets":[{
                    "key_as_string":"2013-02-02",
                    "key":1328140800000,
                    "doc_count":1
                },{
                    "key_as_string":"2013-03-02",
                    "key":1330646400000,
                    "doc_count":2
                },
                ...
                ]}
            }
    }

    其中key_as_string是格式化后的日期,key显示了是日期时间戳,

    time_zone时区的用法

    在es中日期支持时区的表示方法,这样就相当于东八区的时间。

    {
        "aggs":{
            "by_day":{
                "date_histogram":{
                    "field":"date",
                    "interval":"day",
                    "time_zone":"+08:00"
                }
            }
        }
    }

    offset 使用偏移值,改变时间区间

    默认情况是从凌晨0点到午夜24:00,如果想改变时间区间,可以通过下面的方式,设置偏移值:

    {"aggs":{
        "by_day":{
            "date_histogram":{
                "field":"date",
                "interval":"day",
                "offset":"+6h"
                }
            }
        }
    }

    那么桶的区间就改变为:

    "aggregations":{
        "by_day":{
            "buckets":[{
                "key_as_string":"2015-09-30T06:00:00.000Z",
                "key":1443592800000,
                "doc_count":1
            },{
                "key_as_string":"2015-10-01T06:00:00.000Z",
                "key":1443679200000,
                "doc_count":1
            }]
        }
    }

    Missing Value缺省字段

    当遇到没有值的字段,就会按照缺省字段missing value来计算:

    {
        "aggs":{
            "publish_date":{
                "date_histogram":{
                    "field":"publish_date",
                    "interval":"year",
                    "missing":"2000-01-01"
                }
            }
        }
    }

    其他

    对于其他的一些用法,这里就不过多赘述了,比如脚本、Order、min_doc_count过滤,extended_bounds等都是支持的。

  • 相关阅读:
    【竞赛笔记】飞思卡尔智能车竞赛
    【实习笔记】智能广场健身设备总结
    RabbitMQ之安装
    数据结构与算法之队列
    joda-time时间操作组件
    JavaScript中的跨域问题
    数据结构与算法之链表
    Jedis集成到项目中
    ICMP协议和ping命令
    jedis的使用
  • 原文地址:https://www.cnblogs.com/sha0830/p/5549347.html
Copyright © 2020-2023  润新知