前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Elasticsearch直方图聚合区间产生min越界的问题

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

原创
作者头像
岳涛
修改2022-04-26 16:23:30
2.2K1
修改2022-04-26 16:23:30
举报
文章被收录于专栏:大数据生态大数据生态

说明

本文描述问题及解决方法同样适用于 腾讯云 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
复制
key = extended_bounds.min - (extended_bounds.min % interval)

解决方法

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

代码语言:javascript
复制
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原理
      相关产品与服务
      Elasticsearch Service
      腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
      http://www.vxiaotou.com