Manifest主要保存索引的XML文档集的统计信息和索引的元素结点的统计信息。一个示例如下:
<parameters>
<code-build-date>Apr 10 2008</code-build-date>
<corpus>
<document-base>1</document-base>
<frequent-terms>2</frequent-terms>
<maximum-document>9</maximum-document>
<total-documents>8</total-documents>
<total-terms>35231</total-terms>
<unique-terms>5799</unique-terms>
</corpus>
<fields>
<field>
<byte-offset>0</byte-offset>
<isNumeric>false</isNumeric>
<isOrdinal>false</isOrdinal>
<name>article</name>
<total-documents>8</total-documents>
<total-terms>35182</total-terms>
</field>
<field>
<byte-offset>48</byte-offset>
<isNumeric>false</isNumeric>
<isOrdinal>false</isOrdinal>
<name>body</name>
<total-documents>7</total-documents>
<total-terms>1956</total-terms>
</field>
<indri-distribution>Indri development release 2.6</indri-distribution>
<type>DiskIndex</type>
</parameters>
Corpus:主要记录索引的文档的总数,单词的总数,不重复的单词的总数,文档编号的起始值、目前已使用的最大值,f>1000的单词的个数。
Field:主要记录索引的元素结点的统计信息,主要包括元素结点的倒排索引在fieldFile的起始位置,是否是数字类型的,出现在多少个文档中,包含的单词的总数。
Corpus:主要记录索引的文档的总数,单词的总数,不重复的单词的总数,文档编号的起始值、目前已使用的最大值,f>1000的单词的个数。
Field:主要记录索引的元素结点的统计信息,主要包括元素结点的倒排索引在fieldFile的起始位置,是否是数字类型的,出现在多少个文档中,包含的单词的总数。
invertedFile主要存储单词的倒排序索引,它主要存储包含这相单词的所有文档,和在这些文档中的位置,文档用文档编号documentId表示,位置position用这个单词之前的单词个数表示,由于一个文档中可能包含多个相同的单词,所以在存储位置信息时采用了RVL压缩算法。要查找指定单词的倒排序索引,可先查找frequentString或infrequentString,从查找到的DiskTermData中找出索引在invertedFile中的起始位置和长度,迅速定位该单词对应的倒排索引。invertedFile的示例如表四所示。
表四
TermData | documentId,position size,position1,positon2… documentId,position size,position1,positon2… |
TermData | documentId,position size,position1,positon2… documentId,position size,position1,positon2… |
TermData | documentId,position size,position1,positon2… documentId,position size,position1,positon2… |
fieldsFile主要存储元素结点的倒排过引,和单词的倒排索引类似,主要包括所在的文档编号,元素结点的开始编号extent.begin、结束编号extent.end,序号 extent. Ordinal,序号表示在文档中的先后次序,是从1开始记数的。元素结点的开始编号和结束编号,就是结点前的单词的个数。fieldsFile的示例如表五所示。
表五
UINT8 control (numeric ? 0x02 : 0 | ordinal ? 0x04 : 0), docid, extents size, extent.begin, extent.end, extent. ordinal docid, extents size, extent.begin, extent.end, extent. ordinal |
UINT8 control (numeric ? 0x02 : 0 | ordinal ? 0x04 : 0), docid, extents size, extent.begin, extent.end, extent. ordinal docid, extents size, extent.begin, extent.end, extent. ordinal |
UINT8 control (numeric ? 0x02 : 0 | ordinal ? 0x04 : 0), docid, extents size, extent.begin, extent.end, extent. ordinal docid, extents size, extent.begin, extent.end, extent. ordinal |
documentLengths 里面存放着一个一个的32位整数,表明每个文档长度。
documentStatistics主要按照索引的顺序,依次存入每个文档DocumentData这个结构体,DocumentData结构体中包含的字段表六所示。由于每个DocumentData结构体的长度是固定的,所以可根据(docid-1)*sizeof(DocumentData)来查找文档对应的DocumentData结构体。
表六
UINT64 offset | 该文档的结构信息在directFile中的起始位置 |
int byteLength | 该文档的结构信息在directFile中的长度 |
int indexedLength | 去除stopword后,文档单词个数 |
int totalLength | 不去除stopword后,文档单词个数 |
int uniqueTermCount | 文档中不重复的单词个数 |
directFile主要存放每个文档中单词和元素结点的信息,包括数量和位置,根据这些信息,可重构文档的整个结构。示例结构如表七所示。
表七
termCount, fieldCount,termid1,termid2,…fields1.id, fields1. parentOrdinal, fields1. begin, fields1. end, fields1. number,… |
termCount, fieldCount,termid1,termid2,…fields1.id, fields1. parentOrdinal, fields1. begin, fields1. end, fields1. number,… |
termCount, fieldCount,termid1,termid2,…fields1.id, fields1. parentOrdinal, fields1. begin, fields1. end, fields1. number,… |