Annotated Lucene:第三节 索引文件结构(7)
3.2.3.7 Term向量文件
Term向量(vector)的支持是field基本组成中对一个field来说的可选项,它包含如下4种文件:
1. 文档索引或.tvx文件:对每个文档来说,它把偏移(offset)存储进文档数据(.tvd)文件和域field数据(.tvf)文件
|
版本 |
包含的项 |
数目 |
类型 |
描述 |
|
全部版本 |
TVXVersion |
1 |
Int |
在Lucene 2.4中为3 (TermVectorsReader.FORMAT_VERSION2) |
|
DocumentPosition |
NumDocs |
UInt64 |
在.tvd文件中的偏移 |
|
|
FieldPosition |
NumDocs |
UInt64 |
在.tvf文件中的偏移 |
结构如下图所示:

2. 文档或.tvd文件:对每个文档来说,它包含fields的数目,有term向量的fields的列表,还有指向term向量域文件(.tvf)中的域信息的指针列表。该文件用于映射(map out)出那些存储了term向量的fields,以及这些field信息在.tvf文件中的位置。
|
版本 |
包含的项 |
数目 |
类型 |
描述 |
|
全部版本 |
TVDVersion |
1 |
Int |
在Lucene 2.4中为3 (TermVectorsReader.FORMAT_VERSION2) |
|
NumFields |
NumDocs |
VInt |
|
|
|
FieldNums |
NumDocs |
FieldNums |
|
|
|
|
FieldNums->FieldNumDelta |
NumFields |
VInt |
|
|
|
FieldPositions |
NumDocs |
FieldPositions |
|
|
|
FieldPositions->FieldPositionDelta |
NumField-1 |
VLong |
|
结构如下图所示:

3. 域field或.tvf文件:对每个存储了term向量的field来说,该文件包含了一个term的列表,及它们的频率,还有可选的位置和偏移信息。
|
版本 |
包含的项 |
数目 |
类型 |
描述 |
|
全部版本 |
TVFVersion |
1 |
Int |
在Lucene 2.4中为3 (TermVectorsReader.FORMAT_VERSION2) |
|
NumTerms |
NumFields |
VInt |
|
|
|
Position/Offset |
NumFields |
Byte |
|
|
|
TermFreqs |
NumFields |
TermFreqs |
|
|
|
TermFreqs->TermText |
NumTerms |
TermText |
|
|
|
TermText->PrefixLength |
NumTerms |
VInt |
|
|
|
TermText->Suffix |
NumTerms |
String |
|
|
|
TermFreqs->TermFreq |
NumTerms |
VInt |
|
|
|
TermFreqs->Positions? |
NumTerms |
Positions |
|
|
|
Positions->Position |
TermFreq |
VInt |
|
|
|
TermFreqs->Offsets? |
NumTerms |
Offsets |
|
|
|
Offsets->StartOffset |
TermFreq |
VInt |
|
|
|
Offsets->EndOffset |
TermFreq |
VInt |
|
结构如下图所示:

备注:
- Positions/Offsets 字节存储的条件是当该term向量含有存储的位置或偏移信息时。
- Term Text prefixes文本前缀是共享的,表示根据前一个term的文本来初始化的字符串前缀长度,前一个term必须已经预设成后缀文本以便构成该term的文本。比如,如果前一个term为“bone”,而当前term为“boy”,则该PrefixLength值为2,suffix值为“y”。
- Positions存储为Delta编码的VInts,意思是我们只能存储当前位置与最后位置的差值。
- Offsets存储为Delta编码的VInts,第一个VInt是startOffset,第二个VInt是endOffset。