Lucene鼓励从多个线程重用IndexWriter.
鉴于两个线程可能具有对IndexWriter的引用,如果线程A在编写器上调用close,则线程B将留下无用的编写器.但据我所知,lucene以某种方式知道另一个线程使用相同的编写器并推迟其闭包.
确实如此吗?lucene如何跟踪另一个线程使用编写器?
编辑从答案判断,关闭IndexWriter是不正确的.但这会带来一个新问题:如果一个人保持IndexWriter打开,实质上阻止从另一个JVM访问此索引(例如,在群集的情况下,或许多应用程序之间的共享索引).
小智 6
如果一个线程关闭了IndexWriter而其他线程仍在使用它,那么你将得到不可预测的结果.我们试图让其他线程命中AlreadyClosedException,但这只是最好的努力(不保证).你也可以轻松点击NullPointerException.因此,您必须在外部进行同步,以确保不执行此操作.
最近(目前仅在Lucene的主干中,最终为4.0)修复了IndexWriter中的一个大线程瓶颈,允许段刷新同时运行(之前它们是单线程的).在并发硬件上运行许多索引线程的应用程序上,这可以大大提高索引吞吐量.有关详细信息,请参见http://blog.mikemccandless.com/2011/05/265-indexing-speedup-with-lucenes.html.
| 归档时间: |
|
| 查看次数: |
6379 次 |
| 最近记录: |