您的位置:首页 > 大数据 > 人工智能

lucene 异常 Lock obtain timed out 解决方法

2014-11-07 10:31 399 查看
http://terje.blog.163.com/blog/static/119243712008102122316595/


一般都是索引建立的过程中,不正常操作影响了IndexWriter正常使用,那么下次在使用这个IndexWriter就有这种问题了。最简单的方法,手动删掉文件锁,重新创建一个IndexWriter实例。或者在创建实例的时候删掉锁。
经验,将保持的IndexWriter实例取出来(为提高效率,减少对磁盘的IO,管理了IndexWriter的实例),关闭后(异常之前建立的索引是没问题的,关闭是使他生效),重新构造一个实例。

实战代码:

[align=left] // org.apache.lucene.store.LockObtainFailedException: Lock obtain timed out: NativeFSLock@/data/index/ipsos/weibo24/cache/201209/write.lock[/align]
[align=left] // 获取文件锁超时,IndexWriter关闭后,删掉锁,重新获取[/align]
[align=left] if (e.getMessage().indexOf("Lock obtain timed out") != -1) {[/align]
[align=left] LoggerUtil.debugTrace(bizTypeEnName, _objId + " IndexWriter{ " + indexFilePath + " }获取文件锁超时,IndexWriter关闭,等待重新获取");[/align]
[align=left] if (!Validate.isEmpty(indexFilePath)) {[/align]
[align=left] IndexWriter indexWriter = writerMap.get(indexFilePath);[/align]
[align=left] LoggerUtil.debugTrace(bizTypeEnName, _objId + " IndexWriter{ " + indexFilePath + " }关闭开始,是否为空 " + (null == indexWriter));[/align]
[align=left] if (null != indexWriter) {[/align]
[align=left] indexWriter.close();[/align]
[align=left] LoggerUtil.debugTrace(bizTypeEnName, _objId + " IndexWriter{ " + indexFilePath + " }关闭成功,等待重新获取已开始");[/align]
[align=left] indexWriter = null;[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] }[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐