如果没有结果,则将Solr StatsComponent的零错误除以日期字段

时间:2012-02-20 21:49:10

标签: solr statistics datefield divide-by-zero

我有许多由Solr 3.5索引的文档,其中包含日期字段(solr.DateField)等。现在我请求Solr组件,它应该不返回任何结果:

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,它试图例如在这种情况下计算平均值。不幸的是我没有找到关于这个问题的参考资料。有没有办法绕过或解决问题?

1 个答案:

答案 0 :(得分:6)

你是对的,问题在于计算平均值:

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

sumcount都是long。当count为零时,您当然会获得ArithmeticException。您实际上是在日期字段上创建统计信息,该字段从未在索引中具有值。最简单的解决方法是在一个至少有一个值的字段上制作统计数据,因此count变量将大于零,该除法将起作用,我猜测统计数据会更有意义。

使用数字字段在相同情况下不会得到相同的错误,因为在这种情况下,sum变量为double,因此除法不会引发错误,结果为{{1} }。实际上,根据字段类型有不同的NaN实现。

<强>更新
我打开了SOLR-3160 jira问题并提供了一个刚刚提交的补丁。 Solr的下一个版本将包含修复程序!