在创建索引过程中,一些参数可以影响索引的效率。如果了解一些优化的手段,可以更合理地配置应用。不过这都是一些思想,如果数据量达不到一定级别,用户量不到一定规模,默认的参数总是能满足绝大部分需求。
合并因子 mergeFactor
mergeFactor是用来决定segment该如何被addDocument() 方法进行合并的。当mergeFactor取较小值时,索引时所使用的内存少,搜索未优化索引的速度快,建立索引的速度慢。当mergeFactor取较大值时,建立索引所需的内存多,查找的速度相对慢,建立索引会快一些。因此,mergeFactor取较大值时,适合于批量索引的建立,取较小值,适合间歇性的向索引中加入文档。
当然,无论是创建新的segment还是合并segment,都需要进行磁盘的I/O操作,相对于内存操作,这种操作是费时的,合理的mergeFactor既要考虑到程序的内存使用问题(内存溢出),又要考虑到磁盘的读写问题(效率提升)。
Lucene默认将mergeFactor设置为了10,大多数情况下,不需要改变该值。
方法 optimize()
IndexWriter的optimize()方法可以对当前的IndexWriter所指定的索引目录及其缓存目录下的所有segment进行优化,使所有的segment合并成完整的segment。这样整个索引目录下只有一种文件前缀。
如果索引文件数太大,打开这些文件非常消耗操作系统资源。在Linux平台下,还可能出现too many open files
的问题。
不过,Lucene在进行优化时,采用的策略是建立新的segment来取代被合并的segment。因此,合并操作时,所占用的磁盘空间可能会达到之前索引大小的两倍,庞大的I/O操作可能会拖慢Lucene的性能。