我在群集的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();
}
是否有人知道我做错了什么是在这种情况下使用的正确方法。
答案 0 :(得分:2)
不同的JVM不可能在写入模式下访问相同的索引。您只能使用只读索引执行此操作。
lucene索引必须由单个JVM管理。
如果要在群集环境中部署lucene,您必须查看Lucene SolrCloud或ElasticSearch。
答案 1 :(得分:2)
除了上一个答案之外,强烈建议不要使用NFS作为Lucene索引,因为它会严重损害性能。 有关更多信息,请参阅此类讨论: http://lucene.472066.n3.nabble.com/Lucene-index-on-NFS-td4011301.html
还有一个请求功能,可以获得完整的NFS支持(这意味着处理延迟删除): https://jira.atlassian.com/browse/JRA-33887
答案 2 :(得分:1)