开发环境
- 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做排序操作则会出现上述报错。