中文(中国)更改
 
powered by
Hawk Search
Hawk Search

 
分类

 
文章

 
日历

二月 2010
« 四    
1234567
891011121314
15161718192021
22232425262728
 
 
Javen-Studio Thinking of Life, Imagination of Future.
NEWS

Annotated Lucene:第三节 索引文件结构(4)

3.2.3.3 Term字典(.tii和.tis)

Term字典使用如下两种文件存储,第一种是存储term信息(TermInfoFile)的文件,即.tis文件,格式如下:

版本

包含的项

数目

类型

描述

全部版本

TIVersion

1

UInt32

记录该文件的版本,1.4版本中为-2

TermCount

1

UInt64

IndexInterval

1

UInt32

SkipInterval

1

UInt32

MaxSkipLevels

1

UInt32

TermInfos

1

TermInfo…

TermInfos->TermInfo

TermCount

TermInfo

TermInfo->Term

TermCount

Term

Term->PrefixLength

TermCount

VInt

Term文本的前缀可以共享,该项的值表示根据前一个term的文本来初始化的字符串前缀长度,前一个term必须已经预设成后缀文本以便构成该term的文本。比如,如果前一个term为“bone”,而当前term为“boy”,则该PrefixLength值为2suffix值为“y

Term->Suffix

TermCount

String

如上

Term->FieldNum

TermCount

VInt

用来确定termfield,它们存储在.fdt文件中。

TermInfo->DocFreq

TermCount

VInt

包含该term的文档数目

TermInfo->FreqDelta

TermCount

VInt

用来确定包含在.frq文件中该termTermFreqs的位置。特别指出,它是该term的数据在文件中位置与前一个term的位置的差值,当为第一个term时,该值为0

TermInfo->ProxDelta

TermCount

VInt

用来确定包含在.prx文件中该termTermPositions的位置。特别指出,它是该term的数据在文件中的位置与前一个term的位置地差值,当为第一个term时,该值为0。如果fieldsomitTF设置为true,该值也为0,因为prox信息没有被存储。

TermInfo->SkipDelta

TermCount

VInt

用来确定包含在.frq文件中该termSkipData的位置。特别指出,它是TermFreqs之后即SkipData开始的字节数目,换句话说,它是TermFreq的长度。SkipDelta只有在DocFreq不比SkipInteval小的情况下才会存储。

TermInfoFile文件按照Term来排序,排序方法首先按照Term的field名称(按照UTF-16字符编码)排序,然后按照Term的Text字符串(UTF-16编码)排序。

结构如下图所示:

另一种是存储term信息的索引文件,即.tii文件,该文件包含.tis文件中每一个IndexInterval的值,与它在.tis中的位置一起被存储,这被设计来完全地读进内存中(read entirely into memory),以便用来提供随机访问.tis文件。该文件的结构与.tis文件非常相似,只是添加了一项数据,即IndexDelta。格式如下

版本

包含的项

数目

类型

描述

全部版本

TIVersion

1

UInt32

tis

IndexTermCount

1

UInt64

tis

IndexInterval

1

UInt32

tis

SkipInterval

1

UInt32

TermDocs存储在skip表中的分数(fraction),用来加速(accelerableTermDocs.skipTo(int)的调用。在更小的索引中获得更大的结果值(larger values result),将获得更高的速度,但却更小开销?(fewer accelerable cases)。but fewer accelerable cases, while smaller values result in bigger indexes, less acceleration (in case of a small value for MaxSkipLevels) and more accelerable cases.

MaxSkipLevels

1

UInt32

.frq文件中为每一个term存储的skip levels的最大数目,A low value results in smaller indexes but less acceleration, a larger value results in slighly larger indexes but greater acceleration.参见.frq文件格式中关于skip levels的详细介绍。

TermIndices

IndexTermCount

TermIndice

tis

TermIndice->TermInfo

IndexTermCount

TermInfo

tis

TermIndice->IndexDelta

IndexTermCount

VLong

用来确定该TermTermInfo.tis文件中的位置,特别指出,它是该term的数据的位置与前一个term位置的差值。

结构如下图所示:

发表评论