Lock obtain timed out: SimpleFSLock@E://javasource//LuceneTest//index//write.lock异常

Lock obtain timed out: SimpleFSLock@E://javasource//LuceneTest//index//write.lock异常的原因:

 

1、 lucene在写入索引时, 用在索引目录下建write.lock文件来标识锁定. 而只有在执行close()方法后, 才会删除这个锁文件. 只要这个文件存在, 其他的写索引的程序都会报错: 

  caught a class org.apache.lucene.store.LockObtainFailedException 

  with message: Lock obtain timed out: SimpleFSLock@E://javasource//LuceneTest//index//write.lock 

所以,需要注意, 一定要注意关闭indexWrite. 包括异常下,用finally关闭.否则会导致下一次写索引失败. 

 

2、 如果lucene的索引目录下出现了很多文件, 肯定是有问题的. 几个方面.首先lucene在执行写操作时, 会先在目录下写如一个write.lock的文件锁定这个目录,以避免别的索引再操作这个路径. 否则那样肯定会乱. 锁定之后, 开始写索引, 写索引时lucene建了几个或者几十个临时片段文件, 都似乎又短又乱的字符.cfs的文件. 当索引建立完毕后,没有执行 indexWriter.optimize();方法, 他就不会合并那些乱七八糟的文件. 所以,索引建完后, 一定要执行 上面的优化方法, 保持目录下保留3个文件即可. 也就是很多临时文件会合并到一个文件中去. 切不可大意删除. 但当数据很多时, 另行考虑策略. 

3、 批量增加索引, 如果要成批的用循环加入索引,该怎么办呢. 首先请注意: IndexWriter indexWriter = new IndexWriter(indexDir, 

new ThesaurusAnalyzer(), false); 最后一个参数为false表示持续想索引增加数据. 如果为true, 则每次会删除全部, 重新开始.

4、在批量增加索引时, 程序可以一直执行 

indexWriter.addDocument(doc); 但不能一直执行优化:indexWriter.optimize(); 因为优化方法比较耗时, 特别是当索引很大时, 更要注意. 因为优化, 也仅仅似乎优化会消耗很多时间和cpu. 所以这个时候.多几个文件也没关系. 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值