2

打电话之前AddDocument(),IndexWriter我打电话可以吗

IndexReader.IsLocked(myDirectory)

如果它返回true,则调用

IndexReader.Unlock(myDirectory)

IE

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

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

我不断收到“锁定获取超时”。我的代码中的错误。为了克服这个错误,如果可以的话,我计划采用这种方法。

4

2 回答 2

3

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

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

如果是这种情况,则可以在进程开始时解锁索引。不要在调用之前每次都调用它addDocument,只在创建时调用一次IndexWriter

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

于 2009-05-11T08:50:53.937 回答
0

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

如果处理不当,您将遇到问题……您可以进行多次读取/查询,但不能进行写入

于 2009-06-13T04:42:37.287 回答