在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);
我一直在“锁定获得超时”。我的代码中的错误。 为了克服这个错误,如果没问题,我计划采用这种方法。
答案 0 :(得分:3)
获取“锁定获取超时”错误是一个警告信号,指出处理索引的方式有问题。如果您有多个IndexWriter
写入索引,强制解锁可能会导致您的索引损坏。
但是,根据我的经验,在处理代码时很容易发现这些错误,因为偶尔崩溃和中断的调试会话会使索引锁定,即使没有进程正在写入它。
如果是这种情况,可以在流程开始时解锁索引。在创建addDocument
时,请不要在每次拨打IndexWriter
之前拨打电话。
在任何情况下,请确保在退出进程之前正确关闭所有IndexWriters。
答案 1 :(得分:0)
要记住Lucene的重要一点,只有一个线程应该更新索引...所以网站上有并发用户,但只有一个用户应该更新。
如果你没有正确处理,你会遇到问题......你可以有多个读取/查询但不能写入