1

現在、私は Lucene 3.6 を使用していますが、IndexWriters を機能させるのに苦労しています。

API ドキュメントは、次のことを示唆しています。

IndexWriter writer = new IndexWriter(Directory, Analyzer);

(および他のいくつかの同様のコンストラクター)は減価償却されており、次のようなものを使用する必要があります。

IndexWriter writer = new IndexWriter(Directory, Configuration);

ただし、Eclipse はこの新しいコンストラクターを認識せず (lucene-core3.6.jar がプロジェクトのビルド パスに追加されます)、古いコンストラクターを使用する場合は、警告を抑制する必要があります (これは特にやりたくありません)。 - これらの古いメソッドを使用してメモリ内でインデックスを作成すると、例外がスローされます)。

プロジェクトをクリーンアップしましたが、問題は解決しません。

編集:私が使用しているコード:

        Directory index = new RAMDirectory();
    StandardAnalyzer analyzer = new StandardAnalyzer();
    IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_36, analyzer);
    IndexDeletionPolicy IndexDeletionPolicy = new KeepOnlyLastCommitDeletionPolicy();
    MaxFieldLength fieldLength = new MaxFieldLength(256);
    IndexWriter writer = new IndexWriter(index, analyzer, false, IndexDeletionPolicy, fieldLength);
    //IndexWriter writer = new IndexWriter(index, config); 
    writer.setUseCompoundFile(false);
4

3 に答える 3

1

良い出発点は、常に javadoc を読むことです。

http://lucene.apache.org/core/3_6_0/api/all/index.html

コンストラクター

コンストラクターと説明

  • IndexWriter(Directory d, Analyzer a, boolean create, IndexDeletionPolicy RemovalPolicy, IndexWriter.MaxFieldLength mfl) 非推奨。代わりに IndexWriter(Directory, IndexWriterConfig) を使用してください

  • IndexWriter(Directory d, Analyzer a, boolean create, IndexWriter.MaxFieldLength mfl) 非推奨。代わりに IndexWriter(Directory, IndexWriterConfig) を使用してください

  • IndexWriter(ディレクトリ d、アナライザ a、IndexDeletionPolicy 削除ポリシー、IndexWriter.MaxFieldLength mfl) 非推奨。代わりに IndexWriter(Directory, IndexWriterConfig) を使用してください

  • IndexWriter(ディレクトリ d、アナライザ a、IndexDeletionPolicy 削除ポリシー、IndexWriter.MaxFieldLength mfl、IndexCommit コミット) 非推奨。代わりに IndexWriter(Directory, IndexWriterConfig) を使用してください

  • IndexWriter(Directory d, Analyzer a, IndexWriter.MaxFieldLength mfl) 非推奨。代わりに IndexWriter(Directory, IndexWriterConfig) を使用してください

  • IndexWriter(Directory d, IndexWriterConfig conf) conf で指定された設定に従って、新しい IndexWriter を構築します。

当然のことながら、非推奨のコンストラクターを使用していて、Eclipse が正しく警告を発します。最後のコンストラクターを使用すると、Eclipse は警告を出さないはずです。

于 2012-07-11T15:35:03.723 に答える
0

私は問題を解決しました:

スタックトレースを調べて見つけたlucene(thirdparty-all.jar)に干渉する.jarファイルがありました。.jarを削除すると、問題が削除されました。

于 2012-07-13T10:08:14.133 に答える
0

次のように変更することをお勧めします。

StandardAnalyzer analyzer = new StandardAnalyzer();

に:

StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_36);

StandardAnalyzer のコンストラクターは、Version オブジェクトを受け取ります。おそらく、前の行 (つまり、新しい StandardAnalyzer を作成しようとしたとき) にコンパイル時エラーがあるため、Eclipse は IndexWriter コンストラクターを認識しません。

于 2012-07-11T17:28:26.367 に答える