elasticsearch date_histogram min_doc_count extended_bounds 使用

简述

在 elasticsearch 中做时间的统计分析,最经常遇到的就是date_histogram

date_histogram

按时间间隔统计。支持 year,quarter,month,week ,day 等间隔统计 及时区设置。

min_doc_count

默认值0;返回最小的文档数。强制返回空数据。如果是0,时间间隔内缺少数据,则自动补充0.一般场景就是返回空数据,减少程序的处理。

extended_bounds 扩展,延伸

此值只有当min_doc_count 为0时才具有意义。
此值与min_doc_count 一起使用,是强制返回空数据。

实例

此查询条件查询的时间范围 0 至 2020-03-01,根据时间间隔 月,时区:Shanghai 进行统计分析。并且返回空数。

{
    "size": 0,
    "query": {
        "bool": {
            "must": [
                
                {
                    "range": {
                        "date": {
                            "from": 0,
                            "to": "2020-03-01",
                            "include_lower": true,
                            "include_upper": false,
                            "boost": 1
                        }
                    }
                }
               
            ],
           
            "adjust_pure_negative": true,
            "boost": 1
        }
    },
    "aggregations": {
        "date": {
            "date_histogram": {
                "field": "date",
                "time_zone": "Asia/Shanghai",
                "interval": "1M",
                "offset": 0,
                "order": {
                    "_key": "asc"
                },
                "keyed": false,
                "min_doc_count": 0,
                "extended_bounds": {
                    "min": "2020-01-01",
                    "max": "2020-04-01"
                }
            }
        }
    }
}

查询结果 第二条数据的结果 自动补充0.

{
    "took": 63,
    "timed_out": false,
    "_shards": {
        "total": 6,
        "successful": 6,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 32294,
        "max_score": 0.0,
        "hits": []
    },
    "aggregations": {
        "date": {
            "buckets": [
                {
                    "key_as_string": "2013-01-01T00:00:00.000+08:00",
                    "key": 1356969600000,
                    "doc_count": 8
                },
                {
                    "key_as_string": "2013-02-01T00:00:00.000+08:00",
                    "key": 1359648000000,
                    "doc_count": 0
                },
                {
                    "key_as_string": "2013-03-01T00:00:00.000+08:00",
                    "key": 1362067200000,
                    "doc_count": 0
                },

调整extended_bounds 范围

extended_bounds 的min 调整为 2012-11-01

执行结果
{
    "took": 9,
    "timed_out": false,
    "_shards": {
        "total": 6,
        "successful": 6,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 32294,
        "max_score": 0.0,
        "hits": []
    },
    "aggregations": {
        "date": {
            "buckets": [
                {
                    "key_as_string": "2012-11-01T00:00:00.000+08:00",
                    "key": 1351699200000,
                    "doc_count": 0
                },
                {
                    "key_as_string": "2012-12-01T00:00:00.000+08:00",
                    "key": 1354291200000,
                    "doc_count": 0
                },
                {
                    "key_as_string": "2013-01-01T00:00:00.000+08:00",
                    "key": 1356969600000,
                    "doc_count": 8
                },

返回的结果集中多了两条数据

{
                    "key_as_string": "2012-11-01T00:00:00.000+08:00",
                    "key": 1351699200000,
                    "doc_count": 0
                },
                {
                    "key_as_string": "2012-12-01T00:00:00.000+08:00",
                    "key": 1354291200000,
                    "doc_count": 0
                },

这两条数据都是0.

总结

extended_bounds 的作用就扩展数据范围。强制补充0. 因此只有min_doc_count 为 0 时才有意义。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值