【问题标题】:Using IndexReader IsLocked and Unlock methods使用 IndexReader IsLocked 和 Unlock 方法
【发布时间】:2009-05-11 02:14:18
【问题描述】:

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

IndexReader.IsLocked(myDirectory)

如果返回true,则调用

IndexReader.Unlock(myDirectory)

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

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

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

【问题讨论】:

    标签: lucene lucene.net


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 感谢您的宝贵意见...我是 Lucene 的新手...只是想知道当我通过并发的 Web 应用程序公开 Lucene 搜索 API 时需要注意的事项用户可以同时更新 Lucene 索引....
    【解决方案2】:

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多