作者:吴冬冬,搜索引擎应用工程师,转载请注明出处。
刚开始使用Lucene的时候,当程序不正常退出时,write.lock总是存在,再次执行就会错误,相信大家也都遇到过,经过长时间的深入研究才搞明白错误的缘由。
这个错误是因为File.createNewFile产生的bug。大家也许不明白了,Lucene中怎么会有File的Bug,那么听我一一道来。
首先,你得清楚,FSDirectory的默认LockFactory是SimpleFSLockFactory.
其次,SimpleFSLockFactory是基于File.createNewFile()的
就是这个bug,导致lucene在不正常退出时,锁定不会解除,当你再次启动时就会报LockObtainFailedException 的异常.
解决的办法就是手动删除write.lock文件或者调用IndexReader.unlock(Directory),推荐第二种方法。
其实报这样的错误,并没有东西写入你的索引中,你得索引也没有打乱。