6

我在谷歌上搜索了两天......我真的需要帮助。

我有一个具有多个线程的应用程序,尝试使用 Open/Close 更新 lucene 索引以IndexWriter进行每次更新。线程可以随时启动。

是的,有问题write.lock!所以可能有两种或多种解决方案:

1)检查IndexWriter.IsLocked(index)它是否被锁定以休眠线程。
2)打开一个IndexWriter,永远不要关闭它。问题是我有另一个使用相同索引的应用程序。另外我应该什么时候关闭索引并完成整个过程?

这里有有趣的帖子
Lucene IndexWriter 线程安全
Lucene - 打开一个封闭的 IndexWriter

更新:整整 2 年后,我做了一个包含 API 的 rest API,所有写入和读取都被路由到 API。

4

1 回答 1

7

多个线程,相同的进程:

保持IndexWriter打开状态,并跨多个线程共享它。IndexWriter是线程安全的。

对于多个进程,您的解决方案 #1 容易出现竞争条件问题。您需要使用命名Mutex来安全地实现它:http: //msdn.microsoft.com/en-us/library/bwe34f1k.aspx

话虽如此,我个人会选择专用于写入索引的进程,并使用 WCF 之类的东西与之通信。

于 2012-09-11T18:04:23.853 回答