Lucene.Net和I/O线程问题

6 lucene multithreading lucene.net

我有一个名为"Execute()"的索引函数,使用IndexWriter索引我的网站的内容.如果我只是从网页上调用它,它的效果很好,但是当我将它作为委托参数输入System.Threading.Thread时失败了.奇怪的是,它总是在我的本地开发机器上工作,它只在我上传到共享主机时失败.

这是我收到的错误消息

"锁定获得超时:SimpleFSLock错误......"

以下是失败的代码(但只在共享主机上失败)

Scheduler scheduler = new Scheduler();
System.Threading.Thread schedulerThread = new System.Threading.Thread(scheduler.Execute);
Run Code Online (Sandbox Code Playgroud)

以下是有效的代码(在我的本地计算机和共享主机上工作)

Scheduler scheduler = new Scheduler();
schedulre.Execute();
Run Code Online (Sandbox Code Playgroud)

现在,一些ppl说,它可能是以前的调试会话遗留下来的坏事,所以在我实例化IndexWriter之前,我做了

if (IndexReader.IsLocked(indexingFolder))
{

    log.Debug("it is locked");
    IndexReader.Unlock(FSDirectory.GetDirectory(indexingFolder));
}
else
{
    log.Debug("it is not locked");
}
Run Code Online (Sandbox Code Playgroud)

你猜怎么着?我的日志说,它没有锁定.

所以现在我很确定它是由System.Thread.Threading造成的,但我不知道如何修复它.

谢谢

Kev*_*bet 0

可能是尝试回答这个问题的最糟糕的一个,因为我没有使用过 lucene / 共享托管,但 SimpleFSLock 听起来像是通过在文件系统上使用显式锁定文件来锁定 lucene 索引文件(与线程中的锁定不太一样) 。我想说的是,请检查以确保您已配置正确的文件路径并且文件权限设置正确。

否则,希望更熟悉 Lucene.net 的人能够回答。