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

除了前面的答案之外,强烈建议不要将 NFS 用于 Lucene 索引,因为它会严重损害性能。有关更多信息,请参阅此类讨论: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 回答
2

不同的JVM不可能在写模式下访问同一个索引。您只能使用只读索引来执行此操作。

lucene 索引必须由单个 JVM 管理。

如果您想在集群环境中部署 lucene,您必须查看Lucene SolrCloudElasticSearch

于 2013-08-01T06:35:12.913 回答
1

我在使用 Lucene 和 Hibernate Search 时遇到了同样的问题。在官方的 Hibernate Search 文档中,据说可以在集群模式下使用具有共享文件系统的 Lucene,如此处所述

您必须确保Exclusive_index_use值是false,它指定第一个节点获得索引锁,直到关闭(默认情况下为 true),如此所述。我认为应该有一种方法可以为没有 Hibernate Search 的 Lucene 指定此设置。

于 2015-03-21T20:59:10.870 回答