開發環境
- 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做排序操作則會出現上述報錯。