2010-04-28 9 views
7

Tengo algunos valores de BigDecimal que deben indexarse ​​para la búsqueda. Lucene tiene NumericField pero tiene setters solo para long, double, float e int. Podría almacenarlo como una Cadena pero luego no me beneficiaría de NumericRangeQuery.Cómo indexar los valores de BigDecimal en Lucene 3.0.1

¿Cómo almacenó sus BigDecimales? ¿Alguna de las mejores prácticas para compartir?

Respuesta

1

Steven Rowe ofrece ideas interesantes en este post:
http://www.lucidimagination.com/search/document/ad648772f8825a28/bigdecimal_values#2502f96055839c3d

Dice que su esquema probablemente podría ser usado para representar todos los valores BigDecimal. Parece más fácil de implementar si no necesitas valores negativos. Como sugirió Mindas, podría extender AbstractField para implementar esto.

Existe también Yonik Seeley que dice que ha iniciado algunos trabajos en Solr para que los BCDUtils clase:
http://www.lucidimagination.com/search/document/ad648772f8825a28/bigdecimal_values#cef1d0e25af063ef

+5

Hola, los hipervínculos no está funcionando. –

3

Si todo lo demás falla, teniendo en cuenta que se extiende AbstractField (similar a la forma en que se extiende NumericField), TokenStream (similar a cómo lo extiende NumericTokenStream) y MultitermQuery (similar a la forma en que se extiende NumericRangeQuery). Las tres clases de Numeric * son desafortunadamente definitivas, por lo que no se pueden extender por su cuenta :(La buena noticia es que la lógica en estas clases es bastante trivial y debería ser fácil actualizarla para BigDecimals.

Almacenamiento de datos es trivial ya que incluso NumericField lo almacena en una cadena desde el Javadoc:.

NOTA:. Esta clase sólo se utiliza durante la indexación al recuperar el valor del campo almacenado desde una instancia de documento después de una búsqueda, obtendrá una convencional Instancia de Fieldable donde los valores numéricos se devuelven como cadenas (según toString (valor) del tipo de datos utilizado).

Si va por esa ruta, intente enviar parches a los desarrolladores de Lucene o al menos complete una solicitud de JIRA. Los desarrolladores de Lucene generalmente son personas agradables y abiertas, por lo que esto podría beneficiar a otros también.