2012-02-20 21 views
5

我有許多由Solr 3.5索引的文檔,其中包含日期字段(solr.DateField)等等。現在我做的請求,Solr的組件,它應該返回任何結果:如果我發送請求在沒有結果的情況下,通過Solr StatsComponent對於日期字段的零錯誤進行除法

http://example.com/solr/select?fq=sis_field_int:1000& 
stats=true&stats.field=ds_field_date 

,並得到錯誤

HTTP Status 500 -/by zero java.lang.ArithmeticException:/by zero at 
org.apache.solr.handler.component.DateStatsValues.addTypeSpecificStats 
(StatsValuesFactory.java:384) at ... 

沒有統計部分或指定任何非日期統計領域,而不是,我得到預期反應沒有結果。它看起來像Solr的一個bug,它會嘗試例如在這種情況下計算平均值。不幸的是,我發現這個問題沒有參考。有沒有辦法繞過或解決問題?

回答

6

你是對的,問題是計算平均值:

res.add("mean", new Date(sum/count)); 

sumcount都是long。當count爲零時,當然你會得到一個ArithmeticException。實際上,您在日期字段上製作統計信息時,您的索引中永遠不會有值。最簡單的解決方法是在一個至少有一個值的字段上進行統計,所以count變量會比零更大,該分區將起作用,而且我猜測統計數據會更有意義。

您不使用數字字段相同的情況下得到了同樣的錯誤,因爲在這種情況下,總變化爲double,從而劃分不提高的錯誤,結果是NaN。實際上,基於字段類型有不同的StatsValues實現。

UPDATE
我已經打開了SOLR-3160 JIRA問題,並提供了剛剛犯了一個補丁。 Solr的下一個版本將包含修復程序!

+0

是否沒有檢查count是否等於零?有什麼辦法可以設置另一個處理這個錯誤的請求Solr其他HTTP 500答案? – dev4 2012-02-21 16:58:34

+0

@ dev4沒有檢查!我認爲最好的辦法是打開一個jira問題。如果你想,你甚至可以提供補丁,否則我肯定有人會看看它,我也可以做到這一點。 – javanna 2012-02-21 17:37:52

+1

@ dev4看看我更新的答案!該修復程序已經提交,它將在下一次Solr發佈時提供! – javanna 2012-02-24 14:46:35

相關問題