lucene索引写入读取机制

首先我看看一个典型的索引目录下都有哪些文件:
一个索引目录
每次IndexWriter commit即写入索引,Lucene都会在指定的索引目录下创建文件名自动递增的三个文件_{no}.cfe, _{no}.cfs, {no}.si,并修改分段信息文件segements以及文件的序列号。write.lock文件顾名思义是为索引提供锁的。这个分段写入的机制保证了我们可以在写索引文件的同时对旧的索引文件进行读取。


lucene对多线程的支持
lucene能够很好地支持多线程/进程 访问。
1.并发读
一个索引可以被多个进程的IndexReader打开。一个进程中,推荐IndexReader被单例多线程使用。
IndexReader类不仅是线程安全的,还是线程友好的,即友好地支持并发访问,代码中同步代码(synchronized)块并不多。

2.单独写
对于一个索引来说,一次只能打开一个IndexWriter。
2.1 索引锁机制
Lucene采用了基于文件的锁。如果锁文件write.lock存在于目录内,那么创建新的IndexWriter就会失败,抛出LockObtainFailedException异常。
lucene允许我们修改锁的实现,通过调用Directory,setLockFactory()传入自定义的子类。

3.边读边写
IndexReader可以在IndexWriter正在修改索引时被打开。每个IndexReader对象将向索引展示自己被打开的时间点。该对象只有在Writer提交修改后才感知到索引变化。
打开IndexReader’时采用参数create=true,reader就会持续检查索引的情况。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值