上QQ阅读APP看书,第一时间看更新
3.2.7 索引的优化与合并
在完成了创建最终倒排文件和词典后,全部倒排索引文件的创建工作完毕。从某种角度上看,这些都是一种预先计算(PreComputation)。这种预先计算都是为了节省查询时间,对海量数据完成一次最终倒排索引文件的制作是非常耗时的,这些尽可能预先完成的计算为查询争取了宝贵时间。优化索引很耗时,但索引优化后,查询速度快。
在优化索引阶段,大约需要索引大小2倍的临时空间。因此需要大约400GB的硬盘来容纳200GB的索引。
索引很多文档的过程通常比较慢。为了加快索引速度,可以多台机器同时索引不同内容,然后合并。要合并的几个不同的索引结构要一致。下面的程序可以把多个目录下的索引合并到一个目录下。
IndexWriter writer = new IndexWriter(args[0], null, true); writer.setMergeFactor(50); //参数越大,用到的内存越多。影响内存的使用 //影响索引文件的数量 writer.setUseCompoundFile(false); Directory[] dirs = new Directory[args.length -1]; System.out.println("begin :"+args[0]); for (int i=1 ; i<args.length; i++) { dirs[i-1]= FSDirectory.getDirectory( args[i], false); if (dirs[i-1]==null) System.out.println("Directory is null:"+i); } writer.addIndexes(dirs); writer.close();