8

検索用にインデックスを作成する必要がある BigDecimal 値がいくつかあります。Lucene には NumericField がありますが、setter は long、double、float、int のみです。これを文字列として保存することはできますが、NumericRangeQuery のメリットはありません。

BigDecimals をどのように保存しましたか? 共有するベストプラクティスはありますか?

4

2 に答える 2

3

他のすべてが失敗した場合は、拡張AbstractField(拡張方法NumericFieldに類似)、TokenStream(NumericTokenStream拡張方法に類似)、およびMultitermQuery(拡張方法に類似) を検討しNumericRangeQueryます。残念ながら、3 つの Numeric* クラスはすべて final であるため、独自に拡張することはできません :( 幸いなことに、これらのクラスのロジックはかなり簡単であり、これを BigDecimals に簡単に改造できるはずです。

データの保存は簡単NumericFieldで、文字列に保存することさえできます。javadoc から:

注: このクラスは、インデックス作成中にのみ使用されます。検索後に保存されたフィールド値を Document インスタンスから取得すると、数値が文字列として返される従来の Fieldable インスタンスが取得されます (使用されるデータ型の toString(value) に従って)。

そのルートに進む場合は、パッチを Lucene 開発者に送信するか、少なくとも JIRA リクエストに記入してください。Lucene の開発者は一般的に親切でオープンな人々であるため、これは他の人にも利益をもたらす可能性があります。

于 2010-04-28T14:31:22.933 に答える
1

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

于 2010-04-28T17:37:22.590 に答える