写索引文件:
索引文件在未合并前是有多个文件组成的,这些文件综合在一起,才为一个实质上的索引文件;这些文件拥有相同的名字,不同的是后缀名;下面,依次介绍这些文件,介绍方式为:从建立索引的类开始,一步步追踪,最后总结。
IndexWriter类
写索引文件从IndexWriter类开始。
IndexWriter类创建索引是以一个一个文件作为单位来建立索引的,IndexWriter类通过addDocument函数将一个一个文件添加,并使用IndexWriter类将该文件添加到索引中。
注:Lucene自己模拟了文件对象,该对象表示一个文件,为Document;addDocument函数的参数就是Document对象;
IndexWriter的作用为建立索引和合并两部分。
1。建立索引:
①IndexWriter使用SegmentInfos类写segment信息。
Segment文件为Lucene索引文件中记录块信息的。块实际上包括多个文件的概述信息,这多个文件实际上就是建立这个索引文件的实际文件。
②IndexWriter的addDocument函数,调用DocumentWriter类,完成建立索引的余下操作。
DocumentWriter类完成建立域信息文件,term信息文件等索引信息的建立。
2。合并:
Lucene有两种合并。
第一种合并:
IndexWriter类构造函数使用SegmentInfos类写索引文件的segment信息,其实并不是一开始就往硬盘上写,而是先往内存中写,到一定的数目合并写入硬盘。
第二种合并:
当索引文件(这里指硬盘上实际存在的索引文件)到一定的数目,这些索引文件合并;接着,循环这种合并。
举例:这里假设合并因子为10。一个索引文件记载10个文件,当这样的文件有10个时,这些索引文件合并成一个100个文件的索引文件。接着,继续形成索引文件,又有10个记载10个文件的索引文件形成,这些文件合并成另一个100个文件的索引文件;当记载100个文件的索引文件有10个时,这些文件合并成记载1000个文件的索引文件;以下类推。