Как индексировать значения BigDecimal в Lucene 3.0.1

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

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

8
задан Petteri Hietavirta 28 April 2010 в 14:08
поделиться

2 ответа

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

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

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

1
ответ дан 6 December 2019 в 00:06
поделиться

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

Хранение данных тривиально, поскольку даже NumericField хранит их в String. Из javadoc:

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

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

3
ответ дан 6 December 2019 в 00:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: