首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

增高Lucene索引性能

2012-09-28 
提高Lucene索引性能?????在索引文件的过程中,?Lucene?不是直接将文件索引到磁盘上,而是首先缓存,然后在写

提高Lucene索引性能

?
????在索引文件的过程中,?Lucene?不是直接将文件索引到磁盘上,而是首先缓存,然后在写到磁盘。如上图所示。?

2)????????索引过程的瓶颈?

往磁盘上写索引文件的过程?将磁盘上的几个小?Segment?合并成一个大的?Segment?的过程?

?

2、??提高索引性能的方法?

?

方式?1?:调整?IndexWriter?参数?

为控制索引占用的内存以及?Segment?段合并的频率,?Lucene?提供了以下三个参数,通过调整这三个参数的值,可以改善索引的性能。?

?mergeFactor?(合并因子):决定把磁盘上的索引块合并成一个大的索引块的频率,默认值为?10?。 比如,?mergeFactor?=?10?,那么当?Segment?的数量达到?10?的话,这?10?个?Segment?会被合并成一个新的?Segment?。如果合并后的这个大的?Segment?的数量达到?10?的话还会被合并成一个更大的?Segment?。直到?Segment?中索引的文件数量达到?maxMergeDocs?时不在合并。如果需要索引的文档数非常多的话这个默认值将是非常不合适的。对批处理的索引来讲,为这个参数赋一个比较大的值会得到比较好的索引效果。?minMergeDocs?(?最小合并文档数?)?:决定了内存中的文档数至少达到多少才能将它们写回磁盘(其实就是?buffer?的大小)。默认值是?10?。如果你有足够的内存,那么将这个值尽量设的比较大一些将会显著的提高索引性能。?maxMergeDocs?(最大合并文档数):决定了一个索引块中的最大的文档数。默认值是?Integer.MAX_VALUE?。 这个参数设置为比较大的值可以提高索引效率和检索速度,由于该参数的默认值是整型的最大值,所以我们一般不需要改动这个参数。?

? 方式?2?:使用?RAMDirectory?

???? RAMDirectory?与?FSDirectory?的不同:?RAMDirectory?的所有操作都在内存中,而?FSDirectory?的操作直接对应磁盘。因此?RAMDirectory?比?FSDirectory?要快。?

??????? 先将索引写入?RAMDirectory?到一定程度在从?RAMDirectory?写入?FSDirectory?可以提高索引性能。

FSDirectory fsDir  =  FSDirectory.getDirectory( " /tmp/index " , true );RAMDirectory ramDir  =   new  RAMDirectory();IndexWriter fsWriter  =  IndexWriter(fsDir, new  SimpleAnalyzer(),  true );IndexWriter ramWriter  =   new  IndexWriter(ramDir, new  SimpleAnalyzer(),  true ); while  (there are documents to index)   { create Document ramWriter.addDocument(doc); if  (condition  for  flushing memory to disk has been met)   {fsWriter.addIndexes(Directory[]   {ramDir} );ramWriter.close();ramWriter  =   new  IndexWriter(ramDir,  new  SimpleAnalyzer(), true );} }
?

?


其实zoie一方面解决了实时搜索这个问题,另一方面也提高了建索引的速度,就是使用的方法二,先使用内存索引,一段时间后merger到磁盘上

?

?

热点排行