4

クラスター化された Websphere 環境で Lucene 4.3.1 を使用しています。両側で、共有 NFS ボリュームにあるインデックスを共有する必要があります。

次のスタック トレースを取得し続けます。

Lock obtain timed out: NativeFSLock@/<pathToIndex>/write.lock
        org.apache.lucene.store.LockObtainFailedException: Lock obtain timed out: NativeFSLock@/<pathToIndex>/write.lock
at org.apache.lucene.store.Lock.obtain(Lock.java:84)
at org.apache.lucene.index.IndexWriter.<init>(IndexWriter.java:667)

次のコードを使用してディレクトリを取得します。

directory = FSDirectory.open( indexPath );

そして、ejb のメソッドで (クラスターメンバーの) ライターを開いたり閉じたりします。

public void removeWikiDocument( long oid ) {
    IndexWriter writer = new IndexWriter( directory, config );
    Term t = new Term( OID, Long.toString( oid ) );
    writer.deleteDocuments( t );
    writer.commit();
    writer.close();
}

そのようなシナリオで使用する正しい方法は何ですか?

4

3 に答える 3

3

前の回答に加えて、Lucene インデックスに NFS を使用するとパフォーマンスが大幅に低下するため、強くお勧めしません。詳細については、この種の議論を参照してください: http://lucene.472066.n3.nabble.com/Lucene-index-on-NFS-td4011301.html

また、NFS を完全にサポートするためのリクエスト機能があります (遅延削除の処理を意味します): https://jira.atlassian.com/browse/JRA-33887

于 2014-06-23T10:12:39.920 に答える
1

Hibernate Search で Lucene を使用しているときに、同じ問題が発生しました。公式の Hibernate Search ドキュメントでは、ここで説明されているように、共有ファイル システムを使用したクラスター モードで Lucene を使用することが可能であると言われています。

ここで説明されているように、 exclusive_index_use値がfalseであることを確認する必要があります。Hibernate Search を使用しない Lucene でもこの設定を指定する方法があるはずだと思います。

于 2015-03-21T20:59:10.870 に答える