现如今越来越多的人使用Lucene来开发自己的搜索引擎,在数据量不大的情况下,我们一般不会太关注创建索引的效率,但是,当数据达到一定的数量时候,我们就必须要考虑如何的去提高创建索引的性能,以减少创建索引的时间。
1、合并因子
setMergeFactory是控制segment合并频率的,其决定了一个索引块中包含多少个文档并且当硬盘上的索引文件达到多少时,将他们合并成一个较大的索引块,mergeFactory值默认为10,但是其值越大,生成索引的速度也就越块。所以可以通过setMergeFactory设置来提高索引创建的效率。
2、最大缓存文档数
setMaxBufferedDocs可以控制写入一个新的segment前内存中保存的document的数目,默认为10,值越大,索引速度创建越快
3、最大合并文档数
setMaxMegerDocs可以控制一个segment中可以保存的最大document数目,值越小就有利于索引的追加速度,默认值为integer.max_value。在创建大数据量的索引时,索引创建的速度瓶颈在于大量的磁盘操作,如果内存足够大,应当尽量使用内存,可以通过setMaxBufferedDocs调整,增大Lucene使用内存的次数。并且如果内存足够大的话,我们可以完全避免使用硬盘。Lucene允许我们先把索引写入到RAMDirectory,达到一定数据量的时候再批量写进FSDirectory,减少磁盘的操作。
4、optimize方法优化索引
删除一个documend时候,Lucene会生成一个*.del文件,该文件中记录了删除的文档,但是从未从物理上删除这些文档,此时被删除的文档是受保护的,当再次访问这些受保护的文档时候,Lucene会报attempt toaccess a deleted document异常,如果需要一次删除多个文档,可以用indexWriter的optimize方法来优化索引,这样 就可以继续删除另外的文档。