python elasticsearch date_histogram聚合查询

Posted zd1009

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python elasticsearch date_histogram聚合查询相关的知识,希望对你有一定的参考价值。

es版本7.6。

在使用python操作es执行date_histogram后台报错“elasticsearch.exceptions.TransportError:TransportError(503...”,kibana里执行同样的条件,报“Trying to create too many buckets. Must be less than or equal to: [10000]”。

后来发现是"time_zone"和"extended_bounds"出的问题,time_zone我设置的是东8区,而extended_bounds中的starttime和endtime还是UTC,因此endtime要在8小时之后,时间跨度很大,导致buckets数量超出限制。需要对extended_bounds日期也增加8小时。

es = Elasticsearch([127.0.0.1:9200], http_auth=(elastic, elastic), timeout=50000)
data = {
        "size": 0,
        "query": {
            "bool": {
                "must": [
                    {
                        "range": {
                            "@timestamp": {
                                "gte": starttime, # UTC
                                "lte": endtime, # UTC
                                "format": "yyyy-MM-dd HH:mm:ss"
                            }
                        }
                    }
                ]
            }
        },
        "aggs": {
            "group_by_timestamp": {
                "date_histogram": {
                    "field": "@timestamp",
                    "fixed_interval": 1s,
                    "format": "yyyy-MM-dd HH:mm:ss",
                    "time_zone": "Asia/Shanghai", # 设置时区为东8区
                    "min_doc_count": 0,
                    "extended_bounds": {
                        "min": starttime, # 需要增加8小时 + datetime.timedelta(hours=8)
                        "max": endtime # 需要增加8小时 + datetime.timedelta(hours=8)
                    }
                }
            }
        }
    }
es.search(index=[index_name], ignore_unavailable=True, body=data)

 

以上是关于python elasticsearch date_histogram聚合查询的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearch date 类型详解

Elasticsearch date 类型详解

Elasticsearch 日期时间处理

Elasticsearch Date类型使用技巧

hive映射Elasticsearch时间date类型问题

hive映射Elasticsearch时间date类型问题