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

Lucene 如何处理多个IndexWriter和多个跨进程IndexWriter,lucene,lucene.net,Lucene,Lucene.net,我在谷歌上搜索了两天。。。我真的需要帮助 我有一个应用程序,其中有多个线程试图为每次更新使用Open/Close ofIndexWriter更新lucene索引。线程可以随时启动 是的,write.lock的问题!因此,可能有两种或两种以上的解决方案: 1) 检查IndexWriter.IsLocked(index)以及它是否被锁定以休眠线程。 2) 打开一个IndexWriter,不要关闭它。问题是我有另一个应用程序使用相同的索引。我应该什么时候关闭索引并完成整个过程 这里有一些有趣的帖子

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

我有一个应用程序,其中有多个线程试图为每次更新使用Open/Close of
IndexWriter
更新lucene索引。线程可以随时启动

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

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

这里有一些有趣的帖子

更新:
整整2年后,我编写了一个rest API,该API进行了包装,所有写入和读取都被路由到该API。

多个线程,相同的过程:

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

对于多个进程,您的解决方案#1容易出现竞争条件问题。您需要使用命名的
互斥体来安全地实现它:


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

是的,我在考虑类似于处理索引更新的外部过程的东西。不关闭索引编写器而只进行提交会产生什么后果?关于索引器和索引片段合并,我需要手动考虑吗?这取决于新文档的数量和您使用的MeGeAdvices。通常,您需要在低流量小时进行优化(IndexWriter.Optimize())。如果您的搜索者是在同一个过程中创建的,则保持IndexWriter打开通常会更好,因为您可以使用近实时搜索:不同过程中的搜索者如何?您需要检测索引的更改并重新打开它们,整整两年后,我做了一个RESTAPI来包装它:所有的写和读都被路由到这个API。