使用IndexReader IsLocked和Unlock方法

时间:2009-05-11 02:14:18

标签: lucene lucene.net

AddDocument()上致电IndexWriter之前,如果我致电

,是否可以
IndexReader.IsLocked(myDirectory)

如果返回true,则调用

IndexReader.Unlock(myDirectory)

if(IndexReader.IsLocked(myDirectory))
{
IndexReader.Unlock(myDirectory);
}

writer = new IndexWriter(myDirectory, _analyzer, true);
writer.AddDocument(doc);

我一直在“锁定获得超时”。我的代码中的错误。 为了克服这个错误,如果没问题,我计划采用这种方法。

2 个答案:

答案 0 :(得分:3)

获取“锁定获取超时”错误是一个警告信号,指出处理索引的方式有问题。如果您有多个IndexWriter写入索引,强制解锁可能会导致您的索引损坏。

但是,根据我的经验,在处理代码时很容易发现这些错误,因为偶尔崩溃和中断的调试会话会使索引锁定,即使没有进程正在写入它。

如果是这种情况,可以在流程开始时解锁索引。在创建addDocument时,请不要在每次拨打IndexWriter之前拨打电话。

在任何情况下,请确保在退出进程之前正确关闭所有IndexWriters。

答案 1 :(得分:0)

要记住Lucene的重要一点,只有一个线程应该更新索引...所以网站上有并发用户,但只有一个用户应该更新。

如果你没有正确处理,你会遇到问题......你可以有多个读取/查询但不能写入