今天在使用Lucene生成索引的时候,总是在索引的过程中出现下面的异常信息:
java.io.IOException: Cannot rename …\segments.new to …\segments
……或
java.io.IOException: Cannot rename …\deletable.new to …\deletable
……
逐一检查了代码、系统目录权限等方面均没有发现问题的所在。后来Google了一下,终于知道原因在杀毒软件的病毒防火墙上面。因为Lucene在生成索引的过程中频繁的创建合并文件,这样病毒防火墙不断地进行监测分析,这个时候就会锁定某个文件,造成Lucene无法进行操作。貌似卡巴斯基的这个问题最严重,呵呵
另外如果关闭病毒防火墙之后依然出现上述异常的话就设置每500条数据就使用optimize()方法对索引优化一次;如果依然出现问题的话那应该更新你的Lucene和lucene analyzers包,因为Lucene2.0有这个bug。我将两个包都更新到最新的2.1版本(2007.4.17)之后运行程序一直没有出现上面的异常提示。
最后总结一下解决的方法,逐一按照一下步骤进行操作:
1) 关闭病毒防火墙;
2) 每500条数据就使用optimize()方法对索引优化依次;
3) 更新Lucene和Analyzers为2.1版本。
参考资料:
Lucene 的一个错误 和一个文件太多
各类读者问题汇总