5

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

4

1 回答 1

6

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

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

sum并且count都是long。什么时候count为零,当然你会得到一个ArithmeticException. 您实际上是在对索引中永远没有值的日期字段进行统计。最简单的解决方法是在至少有一个值的字段上进行统计,因此count变量将大于零,除法将起作用,我猜统计数据会更有意义。

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

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

于 2012-02-21T09:55:36.747 回答