lucene合并索引

由于Clustor的问题造成无法对索引进行同步,脑子中马上浮现用rmi(双机),UDP广播(多机)作通信中间件对clustor进行索引同步但这样经过测试后效率相对较低,故另辟蹊径,最终用索引合并的方式进行快速的索引整合,达到时间短索引同步快的目的。代码如下:

package com.jiepu.lucene_23;


import java.io.File;
import java.io.FileReader;
import java.io.Reader;
import java.util.Date;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.store.FSDirectory;
  
//lucene索引合并:需要版本相差不大或者相同
public class Merge {  
    /** 
     * @author Shane Zhao about merge Index in PCCW BJDEV 
     * 将小索引文件合并到大的索引文件中去 
     *  
     * @param from 
     *            将要合并到to文件的文件 
     * @param to 
     *            将from文件合并到该文件 
     * @param sa 
     */  
    private static void mergeIndex(File from, File to,StandardAnalyzer sa) {  
        IndexWriter indexWriter = null;  
        try {  
            System.out.println("正在合并索引文件!\t ");  
            indexWriter = new IndexWriter(to, sa, false);  
            indexWriter.setMergeFactor(100000);  
            indexWriter.setMaxFieldLength(Integer.MAX_VALUE);  
            indexWriter.setMaxBufferedDocs(Integer.MAX_VALUE);  
            indexWriter.setMaxMergeDocs(Integer.MAX_VALUE);  
            FSDirectory[] fs = { FSDirectory.getDirectory(from) };  
            indexWriter.addIndexes(fs);   //索引合并
            indexWriter.optimize();  
            indexWriter.close();  
            System.out.println("已完成合并!\t ");  
        } catch (Exception e) {  
            System.out.println("合并索引出错!");  
            e.printStackTrace();  
        } finally {  
            try {  
                if (indexWriter != null)  
                    indexWriter.close();  
            } catch (Exception e) {  
  
            }  
  
        }  
  
    }  
    private static void mergeIndex2(File froms[], File to,StandardAnalyzer sa) {  
        IndexWriter indexWriter = null;  
        try {  
            System.out.println("正在合并索引文件!\t ");  
            indexWriter = new IndexWriter(to, sa, false);  
            indexWriter.setMergeFactor(100000);  
            indexWriter.setMaxFieldLength(Integer.MAX_VALUE);  
            indexWriter.setMaxBufferedDocs(Integer.MAX_VALUE);  
            indexWriter.setMaxMergeDocs(Integer.MAX_VALUE); 
            FSDirectory[] fs = new FSDirectory[froms.length];
            for (int i=0;i<froms.length;i++) {
				fs[i]=FSDirectory.getDirectory(froms[i]);
			}      
           //indexWriter.addDocument(new Document());
            indexWriter.addIndexes(fs);   //索引合并
            indexWriter.optimize();  
            indexWriter.close();  
            System.out.println("已完成合并!\t ");  
        } catch (Exception e) {  
            System.out.println("合并索引出错!");  
            e.printStackTrace();  
        } finally {  
            try {  
                if (indexWriter != null)  
                    indexWriter.close();  
            } catch (Exception e) {  
  
            }  
  
        }  
  
    }  
    
    
    
      
    public static void main(String[] areg){  
        File from = new File("e:/index2");  
        File to = new File("e:/index");  
        //mergeIndex(from,to,new StandardAnalyzer());
        mergeIndex2(new File[]{new File("e:/index2"),new File("e:/index")},new File("e:/index4"),new StandardAnalyzer());
    }

  
}  
http://blog.csdn.net/witsmakemen/article/details/7481789

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值