写term索引文件:
介绍完Lucene中term的概念,现在我们开始重新回到正体,建立索引数据库的term信息。
在介绍DocumentWriter类的时候,已经是用分词器将term提取了出来,并进行了排序,最后写了term的两个文件,frq(term频数)和prx(term位置)。接着,DocumentWriter类就要是用别的类来继续索引的建立了。
TermInfosWriter:
TermInfosWriter类写两个索引文件,tis文件和tii文件。Tis文件时记录term信息的文件,而tii文件时记录term信息索引的文件。这两个文件信息结构基本相同,tii可以看成类似于字典中,“A”,“B”等单词在正文中起始位置的索引。在查找时,可以先查找tii文件确定大概位置后再查tis文件。
Tis文件格式:
<ul>
<li>version</li>
<li>TermCount</li>
<ul>注:<TermInfo>TermCount
<ul>注:Term
<li>PrefixLength</li>
<li>deltaLength</li>
<li>deltaChars</li>
<li>fieldNum</li>//出现的field的Num
</ul>
<li>DocFreq</li>//出现的doc的个数
<li>FreqDelta</li>//frq文件的位置delta指针
<li>ProxDelta</li>//prx文件的位置delta指针
</ul>
</ul>
注:这里term中text的表示方法,采用的与前一个词的相同的部分的长度,不同部分的起始位置,不同部分的term来表示的。举例:前一个词add,要表示的词位addition,则addition在Lucene中的表示为:
3(从位置3开始不同),5(不同的地方长度为5),ition(不同的部分)
Tii文件格式与tis的格式基本相同,只是在每个term信息的末尾,记下了该term在tis文件中的位置delta,用作索引目的。
TermVectorWriter:
当该term的field要求存储TermVector的时候,该类起作用。该类写三个文件,tvd、tvf、tvx,这三个文件可以看成组成是Lucene构成的正向索引(前向索引)。
Tvx格式:该文件用于记载tvd中各个document的位置(tvd记载document的位置)。
<ul>
<li>version</li>
<ul>注:tvd文件中每个document的位置
<li>Document Position</li>
<ul>
</ul>
Tvd格式:该文件用于记载每个document的field个数,以及记载tvf中各个field的位置(tvf记载field的位置)。
<ul>
<li>version</li>
<ul>每个document的信息
<li>Field个数</li>
<ul>document中每个field的num
<li>field的num</li>
<ul>
<ul>document中每个field在tvf中的位置
<li>field的位置</li>
<ul>
</ul>
</ul>
Tvf格式:该文件是field的信息,term的列表以及其位置
<ul>
<li>version</li>
<ul>每个field的信息
<li>term的个数</li>
<li>bits = STORE_POSITIONS_WITH_TERMVECTOR
|
STORE_OFFSET_WITH_TERMVECTOR;
</li>
<ul>field中每个term的信息
<li>PrefixLength</li>
<li>deltaLength</li>
<li>delta chars</li>
<li>field中出现频率</li>
<ul>频率个
<li>位置delta</li>
</ul>
<ul>频率个
<li>开始位移</li>
<li>结束位移</li>
</ul>
</ul>
</ul>
</ul>