Как индексировать значения BigDecimal в Lucene 3.0.1 - PullRequest
8 голосов
/ 28 апреля 2010

У меня есть некоторые BigDecimal значения, которые должны быть проиндексированы для поиска. У Lucene есть NumericField, но есть сеттеры только для long, double, float и int. Я мог бы сохранить его как String, но тогда я не получил бы пользу от NumericRangeQuery.

Как вы хранили свои BigDecimals? Какие-нибудь лучшие практики, чтобы поделиться?

Ответы [ 2 ]

3 голосов
/ 28 апреля 2010

Если ничего не помогает, учитывая расширение AbstractField (аналогично тому, как NumericField расширяет его), TokenStream (аналогично тому, как NumericTokenStream расширяет его) и MultitermQuery (аналогично тому, как NumericRangeQuery расширяет его ). Все три класса Numeric *, к сожалению, являются окончательными, поэтому они не могут быть расширены сами по себе :( Хорошая новость заключается в том, что логика в этих классах довольно тривиальна, и ее легко модифицировать для BigDecimals.

Хранение данных тривиально, так как даже NumericField сохраняет их в строке. Из Javadoc:

ПРИМЕЧАНИЕ. Этот класс используется только при индексации. При извлечении значения сохраненного поля из экземпляр документа после поиска, вы получите обычный экземпляр Fieldable, где числовые значения возвращаются в виде строк (согласно toString (значение) используемого типа данных).

Если вы пойдете по этому пути, попробуйте отправить исправление разработчикам Lucene или хотя бы заполнить запрос JIRA. Разработчики Lucene, как правило, хорошие и открытые люди, так что это может принести пользу и другим.

1 голос
/ 28 апреля 2010

Стивен Роу предлагает интересные идеи в этом посте:
http://www.lucidimagination.com/search/document/ad648772f8825a28/bigdecimal_values#2502f96055839c3d

Он говорит, что его схема, вероятно, могла бы использоваться для представления всех значений BigDecimal. Это проще реализовать, если вам не нужны отрицательные значения. Как и предполагалось, вы можете расширить AbstractField для реализации этого.

Есть также Йоник Сили, который говорит, что он начал какую-то работу в Solr с этим классом BCDUtils: http://www.lucidimagination.com/search/document/ad648772f8825a28/bigdecimal_values#cef1d0e25af063ef

...