Деление на ноль ошибки Solr StatsComponent для поля даты в случае отсутствия результатов
У меня есть ряд документов, индексируемых Solr 3.5, которые содержат поля даты (solr.Дата) среди других. Теперь я делаю запрос к компоненту 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 ответ:
Вы правы, проблема заключается в вычислении среднего значения:
res.add("mean", new Date(sum / count));
sum
иcount
- это обаlong
. Когдаcount
равно нулю, конечно, вы получаетеArithmeticException
. Вы фактически делаете статистику по полю даты, которое никогда не имеет значения в вашем индексе. Самым простым обходным путем было бы создание статистики по полю, которое имеет хотя бы одно значение, поэтому переменнаяcount
будет более жирной, чем ноль, разделение будет работать, и статистика будет еще более значимой, я думаю.Вы не получите то же самое ошибка в той же ситуации с использованием числового поля, потому что в этом случае переменная sum равна
double
, таким образом, деление не вызывает ошибки и результат равенNaN
. На самом деле существуют различные реализацииStatsValues
, основанные на типе поля.Обновить
Я открыл выпускSOLR-3160 jira и предоставил патч, который только что был зафиксирован. Следующий выпуск Solr будет содержать исправление!