专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »编程综合 » lucene更新索引:提高Lucene索引性能 »正文

lucene更新索引:提高Lucene索引性能

来源: 发布时间:星期四, 2009年1月15日 浏览:6次 评论:0
  利用 Lucene在创建索引工程中你可以充分利用机器硬件资源来提高索引效率当你需要索引大量文件时你会注意到索引过程瓶颈是在往磁盘上写索引文件过程中为了解决这个问题, Lucene 在内存中持有块缓冲区但我们如何控制 Lucene 缓冲区呢?幸运Lucene 类 IndexWriter 提供了 3个参数用来调整缓冲区大小以及往磁盘上写索引文件频率

  1.合并因子(mergeFactor)

  这个参数决定了在 Lucene 个索引块中可以存放多少文档以及把磁盘上索引块合并成个大索引块频率比如如果合并因子值是 10那么当内存中文档数达到 10 时候所有文档都必须写到磁盘上个新索引块中并且如果磁盘上索引块隔数达到 10 这 10 个索引块会被合并成个新索引块这个参数默认值是 10如果需要索引文档数非常多话这个值将是非常不合适对批处理索引来讲为这个参数赋个比较大值会得到比较好索引效果

  2.最小合并文档数

  这个参数也会影响索引性能它决定了内存中文档数至少达到多少才能将它们写回磁盘这个参数默认值是10如果你有足够内存那么将这个值尽量设比较大些将会显著提高索引性能

  3.最大合并文档数

  这个参数决定了个索引块中最大文档数默认值是 Integer.MAX_VALUE将这个参数设置为比较大值可以提高索引效率和检索速度由于该参数默认值是整型最大值所以我们般不需要改动这个参数

/**
* This demonstrates how to improve the indexing performance
* by adjusting the parameters provided by IndexWriter.
*/
public AdvancedTextFileIndexer {
 public void (String args) throws Exception{
  //fileDir is the directory that contains the text files to be indexed
  File  fileDir = File("C:files_to_index");
  //indexDir is the directory that hosts Lucene's index files
  File  indexDir = File("C:luceneIndex");
  Analyzer luceneAnalyzer = StandardAnalyzer;
  File textFiles = fileDir.listFiles;
  long startTime = Date.getTime;
   mergeFactor = 10;
   minMergeDocs = 10;
   maxMergeDocs = Integer.MAX_VALUE;
  IndexWriter indexWriter = IndexWriter(indexDir,luceneAnalyzer,true);    
  indexWriter.mergeFactor = mergeFactor;
  indexWriter.minMergeDocs = minMergeDocs;
  indexWriter.maxMergeDocs = maxMergeDocs;
  //Add documents to the index
  for( i = 0; i > textFiles[i].getName.endsWith(".txt")){
    Reader textReader = FileReader(textFiles[i]);
    Document document = Document;
    document.add(Field.Text("content",textReader));
    document.add(Field.Keyword("path",textFiles[i].getPath));
    indexWriter.addDocument(document);
   }
  }
  indexWriter.optimize;
  indexWriter.close;
  long endTime = Date.getTime;
  .out.prln("MergeFactor: " + indexWriter.mergeFactor);
  .out.prln("MinMergeDocs: " + indexWriter.minMergeDocs);
  .out.prln("MaxMergeDocs: " + indexWriter.maxMergeDocs);
  .out.prln("Document number: " + textFiles.length);
  .out.prln("Time consumed: " + (endTime - startTime) + " milliseconds");
 }
}


  --

  努力~~~

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: