2010-04-28 9 views
7

Ho alcuni valori BigDecimal che devono essere indicizzati per la ricerca. Lucene ha NumericField ma ha setter solo per long, double, float e int. Potrei archiviarlo come una stringa ma non vorrei beneficiare di NumericRangeQuery.Come indicizzare i valori BigDecimal in Lucene 3.0.1

Come hai memorizzato i tuoi BigDecimals? Qualche buona pratica da condividere?

risposta

1

Steven Rowe fornisce spunti interessanti in questo post:
http://www.lucidimagination.com/search/document/ad648772f8825a28/bigdecimal_values#2502f96055839c3d

Dice che il suo piano potrebbe probabilmente essere utilizzato per rappresentare tutti i valori BigDecimal. Sembra più facile da implementare se non hai bisogno di valori negativi. Come suggerito da mindas, potresti estendere l'Abstract Field per implementarlo.

C'è anche Yonik Seeley che dice che ha iniziato un lavoro in Solr per quella con le BCDUtils classe:
http://www.lucidimagination.com/search/document/ad648772f8825a28/bigdecimal_values#cef1d0e25af063ef

+5

Hi, i collegamenti ipertestuali non funziona. –

3

Se tutto il resto fallisce, considerando estendentesi AbstractField (simile a come NumericField estende esso), TokenStream (simile a come NumericTokenStream estende) e MultitermQuery (simile a come NumericRangeQuery estende esso). Tutte e tre le classi Numeric * sono sfortunatamente definitive quindi non possono essere estese da sole :(La buona notizia è che la logica in queste classi è abbastanza banale e dovrebbe essere facile aggiornarla per BigDecimals.

La memorizzazione dei dati è banale in quanto anche NumericField memorizza in una stringa da javadoc:.

. NOTA: Questa classe viene utilizzata solo durante l'indicizzazione Quando si recuperano il valore del campo memorizzato un'istanza documento dopo di ricerca, si otterrà un convenzionale Istanza Fieldable in cui i valori numerici vengono restituiti come stringhe (in base a toString (valore) del tipo di dati utilizzato)

Se segui questa strada, prova a inviare patch agli sviluppatori Lucene o almeno a riempire una richiesta JIRA. Gli sviluppatori di Lucene sono generalmente gentili e persone aperte, quindi questo potrebbe avvantaggiare anche gli altri.

Problemi correlati