Деление на ноль ошибки 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 5

1 ответ:

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

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

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

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

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