微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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.

原文地址:https://www.jb51.cc/java/125028.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐