2010-04-28 22 views
7

Mam kilka wartości BigDecimal, które powinny być indeksowane do wyszukiwania. Lucene ma NumericField, ale ma setery tylko dla long, double, float i int. Mógłbym przechowywać go jako ciąg, ale wtedy nie skorzystałbym z NumericRangeQuery.Jak indeksować wartości BigDecimal w Lucene 3.0.1

W jaki sposób zapisałeś swoje BigDecimals? Jakieś sprawdzone metody udostępniania?

Odpowiedz

1

Steven Rowe zapewnia ciekawe pomysły w tym poście:
http://www.lucidimagination.com/search/document/ad648772f8825a28/bigdecimal_values#2502f96055839c3d

Mówi, że jego system może być prawdopodobnie używane do reprezentowania wszystkich wartości BigDecimal. Wydaje się łatwiejsze do wdrożenia, jeśli nie potrzebujesz ujemnych wartości. Jak sugeruje mindas, możesz rozszerzyć AbstractField, aby to zaimplementować.

Istnieje również Yonik Seeley, który mówi, że rozpoczął jakąś pracę w Solr za to z BCDUtils klasy:
http://www.lucidimagination.com/search/document/ad648772f8825a28/bigdecimal_values#cef1d0e25af063ef

+5

Cześć, hiperłącza nie działa. –

3

Jeśli wszystko inne zawiedzie, rozważa rozszerzenie AbstractField (podobnie jak NumericField rozciąga je) TokenStream (podobnie jak NumericTokenStream rozciąga go) i MultitermQuery (podobnie jak NumericRangeQuery rozciąga go). Wszystkie trzy klasy liczbowe * są niestety ostateczne, więc nie można ich rozszerzyć na własną rękę :(Dobrą wiadomością jest to, że logika w tych klasach jest dość trywialna i powinna być łatwa do modernizacji w przypadku BigDecimals:

Przechowywanie danych jest trywialne jak nawet NumericField przechowuje je w ciąg z javadoc.

. UWAGA: Ta klasa jest używana tylko podczas indeksowania podczas pobierania wartości pola przechowywane od instancji dokumentu po poszukiwaniach, dostaniesz konwencjonalny Instancja, w której wartości numeryczne są zwracane jako łańcuchy znaków (zgodnie z toString (wartość) używanego typu danych)

Jeśli pójdziesz tą drogą, spróbuj wysłać łatkę do programistów Lucene lub przynajmniej wypełnij prośbę JIRA. Deweloperzy Lucene są na ogół miłymi i otwartymi ludźmi, więc może to również przynieść korzyści innym.