2012-02-20 14 views
5

Tengo un número de documentos indexados por Solr 3.5, que contienen campos de fecha (sol.DateField) entre otros. Ahora hago petición al componente Solr que debe devolver ningún resultado:División por error cero de Solr StatsComponent for date field en caso de no resultados

http://example.com/solr/select?fq=sis_field_int:1000& 
stats=true&stats.field=ds_field_date 

y obtener el error

HTTP Status 500 -/by zero java.lang.ArithmeticException:/by zero at 
org.apache.solr.handler.component.DateStatsValues.addTypeSpecificStats 
(StatsValuesFactory.java:384) at ... 

Si envío petición sin estadísticas parte o especificar cualquier campo de las estadísticas no fecha lugar, consigo esperaba respuesta sin resultados Parece un error de Solr que intenta, p. para calcular el valor medio en este caso. Desafortunadamente no he encontrado referencias sobre este problema. ¿Hay alguna forma de eludir o resolver el problema?

Respuesta

6

Tienes razón, el problema está calculando el valor medio:

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

sum y count son tanto long. Cuando count es cero, por supuesto obtiene ArithmeticException. En realidad estás creando estadísticas en un campo de fecha que nunca tiene un valor en tu índice. La solución más fácil sería hacer estadísticas en un campo que tiene al menos un valor, por lo que la variable count sería mayor que cero, la división funcionará, y las estadísticas serían aún más significativas, supongo.

No obtiene el mismo error en la misma situación usando un campo numérico, porque en ese caso la variable suma es double, por lo que la división no genera error y el resultado es NaN. De hecho, hay diferentes implementaciones StatsValues basadas en el tipo de campo.

ACTUALIZACIÓN
he abierto el tema SOLR-3160 jira y proporciona un parche que acaba de ser cometido. ¡La próxima versión de Solr contendrá la solución!

+0

¿No se verifica si el conteo es igual a cero? ¿Hay alguna manera de establecer otro controlador de este error en la solicitud a otro Solr que la respuesta HTTP 500? – dev4

+0

@ dev4 ¡No hay control! Creo que lo mejor que se puede hacer es abrir un problema jira. Si lo desea, incluso puede proporcionar un parche; de ​​lo contrario, estoy seguro de que alguien lo verá, también puedo hacerlo. – javanna

+1

@ dev4 ¡Mira mi respuesta actualizada! ¡La solución ya se ha confirmado, estará disponible con la próxima versión de Solr! – javanna

Cuestiones relacionadas