最近公司的项目用到lucene,开始的时候还是好好的,不过后来索引文件超过1G后就发现添加索引超慢。在google找了几篇文件,修改了lucene的参数也不见快什么。最后还是采用先建RAM,然后达到一定数量就合并到原来的索引文件。
合并的时候发现了一个问题原来的索引文件越大合并时间越长,而且不管你合并上去的索引数量多少,合并的时候并不会减少多少。
private static void mergeIndex(String to, RAMDirectory[] ramDirs, boolean createIndex) { IndexWriter indexWriter = null; /*createIndex = true; indexWriteCount = 0;*/ try { System.out.println("正在合并索引文件 3!/t "+createIndex); indexWriter = new IndexWriter(to, new StandardAnalyzer(), createIndex); indexWriter.setMergeFactor(100000); indexWriter.setMaxFieldLength(Integer.MAX_VALUE); indexWriter.setMaxBufferedDocs(Integer.MAX_VALUE); indexWriter.setMaxMergeDocs(Integer.MAX_VALUE); long startTime = System.currentTimeMillis(); indexWriter.addIndexes(ramDirs); System.out.println("add to old 3!/t "+ (System.currentTimeMillis() - startTime) ); indexWriter.optimize(); System.out.println("optimize index 3!/t "+ (System.currentTimeMillis() - startTime) ); indexWriter.close(); System.out.println("已完成合并 3!/t "); } catch (Exception e) { System.out.println("合并索引出错 3!"); log.error(e.toString(), e); } finally { try { if (indexWriter != null) indexWriter.close(); } catch (Exception e) { log.error(e.toString(), e); } } }
留个底先,以后再优化参数,看看对增量索引能优化多少。