zoukankan      html  css  js  c++  java
  • 关于Lucene索引合并解决方法

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

    Java代码  收藏代码
    1. package com.pccw;  
    2.   
    3. import java.io.File;  
    4.   
    5. import org.apache.lucene.analysis.standard.StandardAnalyzer;  
    6. import org.apache.lucene.index.IndexWriter;  
    7. import org.apache.lucene.store.FSDirectory;  
    8.   
    9. public class AdvancedTextFileIndexer {  
    10.     /** 
    11.      * @author Shane Zhao about merge Index in PCCW BJDEV 
    12.      * 将小索引文件合并到大的索引文件中去 
    13.      *  
    14.      * @param from 
    15.      *            将要合并到to文件的文件 
    16.      * @param to 
    17.      *            将from文件合并到该文件 
    18.      * @param sa 
    19.      */  
    20.     private static void mergeIndex(File from, File to,StandardAnalyzer sa) {  
    21.         IndexWriter indexWriter = null;  
    22.         try {  
    23.             System.out.println("正在合并索引文件!\t ");  
    24.             indexWriter = new IndexWriter(to, sa, false);  
    25.             indexWriter.setMergeFactor(100000);  
    26.             indexWriter.setMaxFieldLength(Integer.MAX_VALUE);  
    27.             indexWriter.setMaxBufferedDocs(Integer.MAX_VALUE);  
    28.             indexWriter.setMaxMergeDocs(Integer.MAX_VALUE);  
    29.             FSDirectory[] fs = { FSDirectory.getDirectory(from, false) };  
    30.             indexWriter.addIndexes(fs);  
    31.             indexWriter.optimize();  
    32.             indexWriter.close();  
    33.             System.out.println("已完成合并!\t ");  
    34.         } catch (Exception e) {  
    35.             System.out.println("合并索引出错!");  
    36.             e.printStackTrace();  
    37.         } finally {  
    38.             try {  
    39.                 if (indexWriter != null)  
    40.                     indexWriter.close();  
    41.             } catch (Exception e) {  
    42.   
    43.             }  
    44.   
    45.         }  
    46.   
    47.     }  
    48.       
    49.     public static void main(String[] areg){  
    50.         File from = new File("F:/web/faq/lucene/indexDir");  
    51.         File to = new File("F:/indexDir");  
    52.         mergeIndex(from,to,new StandardAnalyzer());  
    53.     }  
    54.   
    55. }  

    测试效率为两个150M的索引文件合并时间在10-15s 效率还是很令人满意的。

  • 相关阅读:
    【python实现卷积神经网络】池化层实现
    【python实现卷积神经网络】批量归一化层实现
    在CentOS Linux系统上,添加新的端口,启用ssh服务
    linux各文件夹的作用
    断网环境下利用pip安装Python离线安装包
    Python数据分析入门之pandas基础总结
    Git入门私房菜
    python处理json
    Json概述以及python对json的相关操作
    将Sublime Text 添加到鼠标右键菜单的教程方法
  • 原文地址:https://www.cnblogs.com/lexus/p/2293966.html
Copyright © 2011-2022 走看看