lucene lock 机制

lucene中的同步机制(lucene locking mechanism)及规则(Concurrency rules)

1、多个只读操作都可以并发,可以是多线程的或者是平行的搜索同一个索引。

2、当索引文件被改变的时候,只读操作同样支持并发。也就是说当你优化索引或者是往索引中添加或者是更新删除索引中的documents,只读操作仍然是允许的(可以继续search)。

3、同一时间只允许一个读写操作。索引在同一时间只能被一个IndexWriter或者IndexReader所打开。

下图是可以当有IndexWriter或者IndexReader在使用的时候可以执行的操作的表格,X号的表示不能执行
从上面的表格可以看出对索引进行操作是不会终止查询和读取索引的,但在实际使用中会影响到查询的效率。如何有线程在不段的做增量索引的话可以将IndexWriter的mergeFactor和maxBufferedDocs的值设置的大些,这样会降低io操作并且不会频繁的merge,另外可以自定义optimize的时间,保证search的效率

指定lock文件存放位置

lucenelock files的默认是由java.io.tempdir的系统属性来制定的。通常linux下是在/tem/,window下是在C:/Documents and Settings/ /Local Settings/Temp下。

我们可以通过java -Dorg.apache.lucene.lockDir=<% path %> 来制定lock files的存放位置。

lucene目前有write.lock和commit.lock两种。

write.lock是在对索引文件进行修改的时候生成的,这个时候IndexWriter的操作或者IndexReader 删除Documents, 取消删除都会抛出异常。

commit.lock是在segments文件被读取或者合并的时候生成的。当IndexReader 读取索引文件之前会获得commit.lock,当segments被读取完毕的时候会释放。IndexWriter在添加文档或者合并索引的时候同样会获得commit.lock

可以用IndexReader的 isLocked来判读索引文件是否被锁,或者unlock方法来解锁

static boolean

isLocked(String directory)

static void

unlock(Directory directory)

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值