开发环境
- ElasticSearch版本: 5.6.1
问题现象
在规定时间段内对省份进行聚合,然后对每个省份出现次数做聚合sum然后进行倒序排序,当部分省份在查询时间段没有记录时会报array_index_out_of_bounds_exception错误,具体返回结果如下:

当去除对每个省份出现次数做聚合sum然后进行倒序排序的操作后,则不会出现报错

问题探究
为了保证每个省份都能显示(即使在时间区段内未出现,聚合sum的结果为0),在对省份进行聚合时添加了min_doc_count: 0使得没有记录的省份也被分桶聚合。
但当我min_doc_count设置为1时,即至少出现一次记录才可以被聚合,则不会报错

原因分析
在对省份进行聚合时,如果doc_count: 0,即没有该省份的记录,则对totalCount做sum聚合产生的结果可能为null,对null做排序操作则会出现上述报错。

在Elasticsearch 5.6.1环境中,对省份进行时间段内的聚合并按聚合结果排序时,若部分省份无记录,会出现array_index_out_of_bounds_exception错误。问题在于doc_count为0的省份进行sum操作后产生null值,导致排序异常。解决方法包括设置min_doc_count为0以包含无记录的省份,或者确保所有省份都有至少一条记录。
最低0.47元/天 解锁文章
478

被折叠的 条评论
为什么被折叠?



