2011-01-19 7 views
3

テキスト内の各番号の用語を作成することはできますか? 例のテキスト:Luceneの数字の多いテキストの索引付け

I got 2295910 unique terms. 

番号は、タイムスタンプ、ポート番号、何もすることができます。ユニークな数は非常に多数のユニークな用語につながります。文書と同じ数のユニークな用語を持つことは正しいと感じません。 Lucene memory usage grows with the number of unique terms

数字の付いたテキストのための特別なアナライザまたはトリックはありますか? StandardAnalyzerは、固有の番号ごとに用語を作成します。

ニーズ:

番号が検索可能なままにしてください。ある文書に複数の数字がある可能性があります。 メモリの使用が問題です。私は複数のインデックスディレクトリに800Mのドキュメントを持っています。 メモリ使用量により、最近使用されていないIndexSearchersを閉じることができます。

未テストのアイデア:

  • 特別アナライザを使用してください。数字をチャンクに分割します。 123456は "123 456"になります。クエリパーサーは、フレーズ検索を使用して番号を検索します。
  • Luceneコードを変更して、数値の用語を表示するときに、より大きなtermInfosIndexDivisorを使用するようにします。

多分私は車輪を再発明しています。既に誰かが解決したのだろうか?

答えて

3

現在、メモリに問題がありますか? Luceneのメモリ使用量はユニークな用語の数とともに増加することは事実ですが、多くの用語を持つインデックスの場合でもメモリの量は比較的少ないです。

メモリが問題であり、実際にLuceneが問題であることを確認するためにコードをプロファイリングしている場合、数値用語を捨てる別のアナライザを作成できます。それを行うと、明らかに数字を使って文書を検索することはできません。

+0

OKです。インデックスには多くのユニークな用語があることは間違いありません。より大きなtermInfosIndexDivisorはメモリ使用量を減らすのに役立ちます。 –

1

Bajafreshは次のように述べています。早すぎる最適化はすべての悪の根源です。

フィールドを複製して数値をスローすると、数値以外のすべてをスローした後、数値フィールドとしてインデックスを付けることもできます。数値フィールドにはspecial storageというメカニズムがあります。これは、固有の用語がごくわずかしか格納されないことを意味します(通常は、精度が低いため、256未満です)。

もちろん、これはフレーズクエリが機能しないことを意味しますが、他の種類のものでも問題はありません(これを動作させるのに十分なクエリパーサーを混乱させると仮定します)。

1

答えは必要に応じて異なります。

これらの用語を検索する必要はありますか?これらの用語を検索する必要がある場合は、検索インデックスの性質に過ぎません。正確な値(範囲の検索など)を検索する必要がない場合は、いくつかのトリックがありますが、完全一致が必要な場合は、これに固執しています。

これらの用語を検索する必要がない場合は、そのインデックスを作成する理由は何ですか?

関連する問題