Ошибка деления на ноль Solr StatsComponent для поля даты в случае отсутствия результатов - PullRequest
5 голосов
/ 21 февраля 2012

У меня есть ряд документов, проиндексированных 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, которая пытается, например, рассчитать среднее значение в этом случае. К сожалению, я не нашел ссылок на эту проблему. Есть ли способ обойти или решить проблему?

1 Ответ

6 голосов
/ 21 февраля 2012

Вы правы, проблема заключается в вычислении среднего значения:

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

sum и count равны long.Когда count равен нулю, конечно, вы получите ArithmeticException.Вы фактически делаете статистику в поле даты, которое никогда не имеет значения в вашем индексе.Самый простой обходной путь - создание статистики по полю, которое имеет хотя бы одно значение, поэтому переменная count будет больше нуля, разделение будет работать, и статистика будет еще более значимой.

Вы не получите ту же ошибку с той же ситуацией, используя числовое поле, потому что в этом случае переменная суммы равна double, таким образом, деление не вызывает ошибку, и результат равен NaN.Фактически, существуют различные реализации StatsValues, основанные на типе поля.

ОБНОВЛЕНИЕ
Я открыл проблему SOLR-3160 jira и предоставилпатч, который только что был зафиксирован.Следующая версия Solr будет содержать исправление!

...