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



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

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

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

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

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

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

多个线程,同一进程:

保持IndexWriter处于打开状态,并在多个线程之间共享。IndexWriter是线程安全的。

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

话虽如此,我个人还是会选择一个专门编写索引的过程,并使用WCF之类的东西与它进行通信。

最新更新