java – Lucene IndexWriter线程安全

Lucene鼓励从多个线程重用IndexWriter.

假设两个线程可能引用了IndexWriter,如果线程A在作者上调用close,则线程B将留下无用的作者.但是据我了解,lucene不知何故知道另一个线程使用同一个作者,并延续其关闭.

这是真的吗? lucene如何跟踪另一个线程使用作者?

编辑
从答案来看,关闭IndexWriter是不正确的.但是这带来了一个新的问题:如果一个IndexWriter保持打开,基本上阻止从另一个JVM访问此索引(例如,在集群的情况下,或许多应用程序之间的共享索引).

最佳答案
如果一个线程在其他线程仍在使用它的情况下关闭IndexWriter,则会得到不可预测的结果.我们尝试让其他线程击中AlreadyClosedException,但这只是最好的努力(不能保证). EG你也可以轻松地打NullPointerException.所以你必须同步外部,以确保你不这样做.

最近(现在只有Lucene的主干,最终要4.0),IndexWriter里面的一个大线程瓶颈是固定的,允许段刷新并发运行(以前它们是单线程的).在并发硬件上运行许多索引线程的应用程序上,可以大大提升索引的吞吐量.详见http://blog.mikemccandless.com/2011/05/265-indexing-speedup-with-lucenes.html.

转载注明原文:java – Lucene IndexWriter线程安全 - 代码日志