如何处理多个IndexWriter和多个跨进程的IndexWriter

时间:2012-09-11 17:12:27

标签: lucene lucene.net

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

我有一个多线程的应用程序尝试使用每次更新的IndexWriter打开/关闭来更新lucene索引。线程可以随时启动。

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

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

这里有趣的帖子
Lucene IndexWriter thread safety
Lucene - open a closed IndexWriter

更新 差不多2年后,我做了一个包含this的休息API,所有的写入和读取都被路由到了API。

1 个答案:

答案 0 :(得分:7)

多个线程,相同的进程:

保持您的IndexWriter已打开,并在多个帖子中分享。 IndexWriter是线程安全的。

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

话虽这么说,我个人选择专门写入索引的过程,并使用类似WCF的东西与它进行通信。