2013-07-29 55 views
2

我在集群Websphere环境中使用Lucene 4.3.1。双方应共享位于共享NFS卷上的索引。在具有共享NFS的群集环境中使用Lucene

我不断收到以下堆栈跟踪:

Lock obtain timed out: [email protected]/<pathToIndex>/write.lock 
     org.apache.lucene.store.LockObtainFailedException: Lock obtain timed out: [email protected]/<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); 

,我打开和关闭的作家(在clustermembers)在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(); 
} 

有人知道我在做什么错吗分别是什么我在这种情况下使用正确的方法。

回答

1

不同的JVM不可能在写入模式下访问相同的索引。你只能用只读索引来做到这一点。

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

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

1

我已经在使用Lucene的使用遇到了同样的问题休眠搜索。在正式的Hibernate Search文档中,据说可以使用共享文件系统的集群模式使用Lucene,如解释here所述。

你必须确保exclusive_index_use其指定的第一个节点获得索引锁持有它直到关机(默认情况下它是真的)作为解释here。我认为应该有一种方法来为没有Hibernate Search的Lucene指定这个设置。