lucene-2.9.0 索引过程(四) 合并过程

Lucene 2.9.0采用对数合并策略,不同于之前的文档数量驱动合并。当内存索引达到设定大小时触发合并。合并过程由独立线程完成,不影响主线程的索引添加。合并过程中,根据segment的level值进行相同区间段的合并,并考虑mergeFactor和minMergeSize等因素。
摘要由CSDN通过智能技术生成

 lucene-2.9.0

此版本使用的是对数合并策略


此前颁布的lucene是通过ducument的数量来驱动索引的合并的
使用策略为立即合并策略
例如合并因为mergeFactor
1.如果满足内存中的文档数为mergeFactor则触发内存索引写入磁盘
  新增的segment文档数为mergeFactor
2.初始合并数为mergeDocs = mergeFactor
3.如果磁盘中有mergeFactor个segment, 每个segment有mergeDocs个文档数,
  触发合并为mergeFactor*mergeDocs新segment
5.更新mergeDocs = mergeFactor*mergeDocs,如果满足条件3,递归合并直至无
  可合并为止
6.调用optimize会将索引索引合并,此时不许满足mergeFactor条件

 

lucene-2.9.0 是使用内存驱动触发过程
意思是,设定内存索引大小(IndexWriter::DEFAULT_RAM_BUFFER_SIZE_MB),
   当预定内存耗尽则
1. 触发内存索引写入磁盘
2. 触发可能的合并过程
3. 合并策略为对数

 


索引合并过程

合并过程是由独立一个线程完成


IndexWriter.addDocument(Document) line: 2428
IndexWriter.addDocument(Document, Analyzer) line: 2475 
IndexWriter.flush(boolean, boolean, boolean) line: 4167 
IndexWriter.maybeMerge() line: 2990
IndexWriter.maybeMerge(boolean) line: 2994
IndexWriter.maybeMerge(int, boolean) line: 2998 
IndexWriter.updatePendingMerges(int, boolean) line: 3028
LogByteSizeMergePolicy(LogMergePolicy).findMerges(SegmentInfos) line: 444 
 

    // 有需要合并的集合
    if (spec != null) {
      final int numMerges = spec.merges.size();
      for(int i=0;i<numMerges;i++)
        registerMerge((MergePolicy.OneMerge) spec.merges.get(i));
    }


另外一个进程依旧索引文档,而一个进程在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值