検索用にインデックスを作成する必要がある BigDecimal 値がいくつかあります。Lucene には NumericField がありますが、setter は long、double、float、int のみです。これを文字列として保存することはできますが、NumericRangeQuery のメリットはありません。
BigDecimals をどのように保存しましたか? 共有するベストプラクティスはありますか?
検索用にインデックスを作成する必要がある BigDecimal 値がいくつかあります。Lucene には NumericField がありますが、setter は long、double、float、int のみです。これを文字列として保存することはできますが、NumericRangeQuery のメリットはありません。
BigDecimals をどのように保存しましたか? 共有するベストプラクティスはありますか?
他のすべてが失敗した場合は、拡張AbstractField
(拡張方法NumericField
に類似)、TokenStream
(NumericTokenStream
拡張方法に類似)、およびMultitermQuery
(拡張方法に類似) を検討しNumericRangeQuery
ます。残念ながら、3 つの Numeric* クラスはすべて final であるため、独自に拡張することはできません :( 幸いなことに、これらのクラスのロジックはかなり簡単であり、これを BigDecimals に簡単に改造できるはずです。
データの保存は簡単NumericField
で、文字列に保存することさえできます。javadoc から:
注: このクラスは、インデックス作成中にのみ使用されます。検索後に保存されたフィールド値を Document インスタンスから取得すると、数値が文字列として返される従来の Fieldable インスタンスが取得されます (使用されるデータ型の toString(value) に従って)。
そのルートに進む場合は、パッチを Lucene 開発者に送信するか、少なくとも JIRA リクエストに記入してください。Lucene の開発者は一般的に親切でオープンな人々であるため、これは他の人にも利益をもたらす可能性があります。
Steven Roweは、この投稿で興味深いアイデアを提供しています:
http ://www.lucidimagination.com/search/document/ad648772f8825a28/bigdecimal_values#2502f96055839c3d
彼は、彼のスキームはおそらくすべてのBigDecimal値を表すために使用できると述べています。負の値が必要ない場合は、実装が簡単なようです。mindasが提案したように、これを実装するためにAbstractFieldを拡張できます。
また、クラスBCDUtilsを使用してSolrで作業を開始したと言うYonik Seeleyもいます:
http ://www.lucidimagination.com/search/document/ad648772f8825a28/bigdecimal_values#cef1d0e25af063ef