在没有结果的情况下,日期字段的Solr StatComponent被零误差除

在没有结果的情况下,日期字段的Solr StatComponent被零误差除,solr,statistics,datefield,divide-by-zero,Solr,Statistics,Datefield,Divide By Zero,我有许多由Solr3.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 or

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

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

res.add("mean", new Date(sum / count));
sum
count
都是
long
。当
计数
为零时,当然会出现
算术异常
。实际上,您正在对一个日期字段进行统计,该字段在索引中从来没有值。最简单的解决方法是对至少有一个值的字段进行统计,因此
count
变量将大于零,除法将起作用,我想统计数据将更有意义

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

更新

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

是否没有检查计数是否等于零?有没有办法在请求中设置此错误的另一个处理程序来解决HTTP 500应答的其他问题?@dev4没有检查!我认为最好的办法是公开一个jira问题。如果你想,你甚至可以提供一个补丁,否则我肯定有人会看的,我也可以。@dev4看我更新的答案!修复程序已经提交,将在下一个Solr版本中提供!非常感谢你,javanna@特德·施特劳斯谢谢,无论如何我都很感激!:)