2012-02-20 16 views
5

Mam wiele dokumentów indeksowanych przez Solr 3.5, które zawierają pola dat (solr.DateField) między innymi. Teraz mam prośbę do komponentu SOLR które powinny nie zwraca wyników:Podział przez błąd zerowy Solr StatsComponent dla pola daty w przypadku braku wyników

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

i dostać błąd

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

Jeśli mogę wysłać wniosek bez statystyk części lub podać dowolny pole wyprzedzeń non-Date zamiast, ja się spodziewać odpowiedź bez wyników. Wygląda jak błąd Solr, który próbuje np. aby obliczyć średnią wartość w tym przypadku. Niestety nie znalazłem żadnych odniesień do tego problemu. Czy istnieje sposób na ominięcie lub rozwiązanie problemu?

Odpowiedz

6

Masz rację, problem jest obliczenie wartości średniej:

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

sum i count są zarówno long. Gdy count ma wartość zero, otrzymasz oczywiście ArithmeticException. W rzeczywistości tworzysz statystyki w polu daty, które nigdy nie ma wartości w twoim indeksie. Najłatwiejszym rozwiązaniem byłoby tworzenie statystyk na polu, które ma co najmniej jedną wartość, więc zmienna count będzie większa niż zero, podział będzie działał, a statystyki będą bardziej znaczące, jak sądzę.

Nie otrzymasz tego samego błędu w tej samej sytuacji za pomocą pola numerycznego, ponieważ w takim przypadku zmienna sumy to double, a zatem podział nie powoduje błędu, a wynikiem jest NaN. W rzeczywistości istnieją różne implementacje StatsValues oparte na rodzaju pola.

UPDATE
Mam otwarty problem SOLR-3160 Jira i pod łatę który właśnie został popełniony. Następne wydanie Solr będzie zawierało poprawkę!

+0

Czy nie ma czeku, czy liczba jest równa zero? Czy istnieje sposób, aby ustawić inny moduł obsługi tego błędu w żądaniu na Solr inne niż odpowiedź HTTP 500? – dev4

+0

@ dev4 Nie ma czeku! Myślę, że najlepszą rzeczą do zrobienia jest otwarcie problemu jira. Jeśli chcesz, możesz nawet dostarczyć łatkę, w przeciwnym razie na pewno ktoś to obejrzy, ja też mogę to zrobić. – javanna

+1

@ dev4 Spójrz na moją zaktualizowaną odpowiedź! Poprawka została już zatwierdzona, będzie dostępna wraz z kolejną wersją Solr! – javanna

Powiązane problemy