首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Elasticsearch直方图聚合区间产生min越界的问题

Elasticsearch直方图聚合区间产生min越界的问题

原创
作者头像
岳涛
修改2022-04-26 16:23:30
修改2022-04-26 16:23:30
2.4K10
代码可运行
举报
文章被收录于专栏:大数据生态大数据生态
运行总次数:0
代码可运行

说明

本文描述问题及解决方法同样适用于 腾讯云 Elasticsearch Service(ES)

背景

参数:extended_bounds

该参数用来限制数据的范围,因为ES默认统计field最大值和最小值之间的所有数据。

问题

ES查询直方图数据,结果明显发生了越界:

代码语言:json
复制
GET robot_msg_202012/_search 
{
    "size":0,
    "query":{
        "bool":{
            "must":[
                {
                    "term":{
                        "kfuin":{
                            "value":"2852199391"
                        }
                    }
                },
                {
                    "term":{
                        "robot_id":{
                            "value":"921678007"
                        }
                    }
                },
                {
                    "range":{
                        "msg_time":{
                            "gte":1607529600000000,
                            "lte":1608134399000000
                        }
                    }
                }
            ]
        }
    },
    "aggs":{
        "time_range_aggs":{
            "histogram":{
                "field":"msg_time",
                "interval":86400000000,
                "min_doc_count":0,
                "extended_bounds":{
                    "min":1607529600000000,
                    "max":1608134399000000
                }
            },
            "aggs":{
                "single_wheel_message_match_nums_sub_aggs":{
                    "filter":{
                        "bool":{
                            "must":[
                                {
                                    "term":{
                                        "answer_type":{
                                            "value":1
                                        }
                                    }
                                },
                                {
                                    "bool":{
                                        "must_not":{
                                            "term":{
                                                "reply_type":0
                                            }
                                        }
                                    }
                                }
                            ]
                        }
                    },
                    "aggs":{
                        "single_wheel_message_match_nums_sub_sub_aggs":{
                            "value_count":{
                                "field":"msg_time"
                            }
                        }
                    }
                },
                "message_match_total_nums_sub_aggs":{
                    "value_count":{
                        "field":"msg_time"
                    }
                },
                "multi_wheel_dos_sent_message_nums_sub_aggs":{
                    "value_count":{
                        "field":"dos_sent"
                    }
                },
                "multi_wheel_unsat_eval_message_nums_sub_aggs":{
                    "value_count":{
                        "field":"unsat_eval"
                    }
                }
            }
        }
    }
}

图中可以看到查询结果的key低于min。

问题原因

这里的越界其实是符合预期的,因为真正的边界取决于interval,而不是min,所表现出的特征是:

结果中看到的最小key(1607040000000000),可以被interval(864000000000)所整除

当extended_bounds.min不被interval整除的时候,默认的最小值为:

代码语言:javascript
代码运行次数:0
运行
复制
key = extended_bounds.min - (extended_bounds.min % interval)

解决方法

histogram提供了offset,以偏移桶的边界,其算法是:

代码语言:javascript
代码运行次数:0
运行
复制
offset = extended_bounds.min % interval

正确的做法是出现这种情况时,设置offset值,这样最小key就会等于extended_bounds.min,问题就会得到解决。

offset原理

https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-histogram-aggregation.html#_offset_2

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 说明
  • 背景
    • 参数:extended_bounds
  • 问题
  • 问题原因
  • 解决方法
    • offset原理
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档