我的知识库

知识等于力量

« 数据复制中的定时任务机制CMM的目的 »

Lucene 2.1研究:文件存储

一.           Lucene原始存储数据类型(Primitive Types

 

 

类型名称

 

说明

 

Byte

 

8 byte

 

UInt32

 

32 byte四字节无符号整型,高位优先

 

UInt64

 

64byte八字节无符号整型,高位优先

 

VInt

 

可变长度整型。0-127单字节,128-16383两字节,类推

 

Chars

 

UNICODE字符串

 

String

 

写入格式为:VIntChars,字符串长度加字符串

 

 

二.           Lucene索引文件

 

1.  Segments

 

文件名称:segments_NN36进制数。

 

 

说明:在一个索引目录中,至少存在一个Segments文件,但可索引活动的只会有一个:N值最大的。其他的Segments文件可能为临时文件,一般情况是索引修改进程没有完成。

 

 

格式:FormatVersionNameCounterSegCount<SegNameSegSizeDelGenHasSingleNormFileNumFieldNormGenNumFieldIsCompoundFile>SegCount

 

FormatNameCounterSegCountSegCountSegSizeNumFieldUInt32

 

VersionDelGenNormGenUInt64

 

SegNameString

 

IsCompoundHasSingleNormFileByte

 

 

格式说明:Format = SegmentInfos.FORMAT_SINGLE_NORM_FILE = -2Version当前时间与UTC时间的差值的毫秒数,每次对索引进行修改时会变化;SegName是所有索引生成文件的前缀;SegSize是当前Segment中包含的Document的数量;

 

 

示例:

 

 

FF FF FF FDFOMAT = -2UInt32

 

00 00 01 13 29 30 B6 33Version = 1181807064627UInt64

 

00 00 00 01NameCount = 1UInt32

 

00 00 00 01SegmentCount = 1UInt32

 

02SegmentNamePrefixLength = 2VInt

 

5F 30SegmentName = _0Chars

 

00 00 00 01SegSize = 1UInt32

 

FF FF FF FF FF FF FF FFDelGen = -1UInt64

 

01HasSingleNormFile = 1Byte

 

FF FF FF FFNumField = -1UInt32

 

FFIsCompoundFile = -1Byte

 

 

2.1版本中还会生成segment.gen文件,主要保存了索引计数,格式为:VersionSegmentInfos.LOCKLESS = -2),GenerationGeneration

 

 

示例:

 

 

 

FF FF FF FEVersion = -2UInt32

 

00 00 00 00 00 00 00 02Generation = 2UInt64

 

00 00 00 00 00 00 00 02Generation = 2UInt64

 

 

2.  Field Info

 

文件名称:SegmentName.fnm

 

 

说明:保存了所有Field的名称。

 

 

格式:FieldCount<FieldNameFieldBits>FieldCount

 

FieldCountVInt

 

FieldNameString

 

FieldBitsByte

 

 

格式说明:

 

 

示例:

 

 

 

01FieldCount = 1VInt

 

04FieldNamePrefixLength = 4VInt

 

49 6E 66 6FFieldName = Info”,Chars

 

01Bits = 1Byte

 

 

3.  Stored Field Index

 

文件名称:SegmentName.fdx

 

 

说明:保存了每个DocumentField Data的地址指针

 

 

格式:<FieldValuesPosition>SegSize

 

FieldValuesPositionUInt64

 

 

格式说明:

 

 

示例:

 

 

 

00 00 00 00 00 00 00 00FieldValuesPosition = 0UInt64

 

 

4.  Stroed Field Data

 

文件名称:SegmentName.fdt

 

 

说明:保存了每个Document的需要存储的Field数据。

 

 

格式:<DocFieldData>SegSize

 

DocFieldDataFieldCount<FieldNumBitsValue>FieldCount

 

FieldCountVInt

 

FieldNumVint

 

BitsByte

 

ValueString | BinaryValue(取决于Bits

 

BinaryValueValueSize<Byte>^ValueSize

 

ValueSizeVInt

 

 

格式说明:

 

 

示例:

 

 

 

01FieldCount = 1VInt

 

00FieldNum = 0VInt

 

01Bits = 1Byte

 

17FieldValuePrefixLength = 23VInt

 

49 20 77 72 69 74 65 20 61 20 6C 65 74 74 65 72 20 6C 65 74 74 65 72Value = I write a letter letter”,Chars

 

 

5.  Term Info Index

 

文件名称:SegmentName.tii

 

 

说明:保存了所有Term Inofs.its)文件的索引间隔条目。

 

 

格式:TIVersionIndexTermCountIndexIntervalSkipIntervalaMaxSkipLevelsTermIndices

 

TIVersionUInt32

 

IndexTermCountUInt64

 

IndexIntervalUInt32

 

SkipIntervalUInt32

 

TermIndeices<TermInfoIndexDelta>IndexTermCount

 

IndexDeltaVInt

 

 

格式说明:

 

 

示例:

 

 

 

FF FF FF FETIVersion = -2UInt32

 

00 00 00 00 00 00 00 01TermCount = 1UInt64

 

00 00 00 08IndexInterval = 128UInt32

 

00 00 00 10SkipInterval = 16UInt32

 

00MaxSkipLevels = 0Byte

 

 

6.  Term Infos

 

文件名称:SegmentName.tis

 

 

说明:存储了所有Term的信息。

 

 

格式:TIVersionIndexTermCountIndexIntervalSkipIntervalaMaxSkipLevelsTIVersionUInt32

 

IndexTermCountUInt64

 

IndexIntervalUInt32

 

SkipIntervalUInt32

 

MaxSkipLevelsVInt

 

TermInfos<TermDocFreqFreqDeltaProxDeltaSkipDelta>TermCount

 

Term<PriefixLengthSuffixFieldNum>

 

 

格式说明:Term按照字典顺序排序;Term的内容是可以共享的。例如:上一个Term为“bone”,当前Term为“boy”,则当前的TemrPrefixLength2Suffix为“y”。

 

 

示例:

 

 

 

FF FF FF FETIVersion = -2UInt32

 

00 00 00 00 00 00 00 01TermCount = 1UInt64

 

00 00 00 08IndexInterval = 128UInt32

 

00 00 00 10SkipInterval = 16UInt32

 

00MaxSkipLevels = 0Byte

 

01TermTextPrefixLength = 1VInt

 

69TermText = i”,Chars

 

00FieldNumber = 0VInt

 

01DocFreq = 1VInt

 

00FreqDelta = 0VInt

 

00ProxDelta = 0VInt

 

00SkipDelta = 0Vint

 

 

以下Term类似

 

 

7Frequencies File

 

文件名称:SegmentName.frq

 

 

说明:

 

 

格式:

 

 

格式说明:

 

 

示例:

 

 

 

8. Positions File

 

文件名称:SegmentName.prx

 

 

说明:保存了每个TermDocument中的位置集合。

 

 

格式:

 

 

格式说明:

 

 

示例:

 

 

 

9.TermVectors Iindex File

 

文件名称:SegmentName.tvx

 

 

说明:保存了在.tvd中的文档数据的指针。

 

 

格式:TVXVersion<DocumentPosition>NumDocs

 

TVXVersionUInt32

 

DcoumentPositionUInt64

 

 

格式说明:

 

 

示例:

 

 

 

00 00 00 02TVXVersion = 2UInt32

 

00 00 00 00 00 00 00 04DocumentPosition = 4UInt64

 

 

 

10.Term Vectors Document

 

文件名称:SegmentName.tvd

 

 

说明:

 

 

格式:TVDVersion<NumFieldsFieldNumsFieldPositions>NumDocs

 

TVDVersionUInt32

 

NumFieldsVInt

 

FieldNums<FieldNumDelta >NumFields

 

FieldPositionVInt

 

 

格式说明:

 

 

示例:

 

 

 

00 00 00 02TVDVersion = 2UInt32

 

01NumFields = 1VInt

 

00FieldNumDelta = 0VInt

 

04FieldPosition = 4VInt

 

 

11.Term Vectors Field

 

文件名称:SegmentName.tvf

 

 

说明:

 

 

 

格式:TVFVersion<NumTermsPosition/OffsetTermFreqs>NumFields

 

TVFVersionUInt32

 

NumTermsVInt

 

Position/OffsetByte

 

TermFreqs<TermTextTermFreqPositions/Offsets>NumTerms

 

TermText<PrefixLengthSuffix>

 

PrefixLengthVInt

 

SuffixChars

 

TermFreqVInt

 

Position<VInt>TermFreq

 

Offsets<VIntVInt>TermFreq

 

 

格式说明:

 

 

示例:

 

 

 

00 00 00 02TVFVersion = 2UInt32

 

03NumTerms = 3VInt

 

00

 

00

 

01TermTextPrefixLength = 1VInt

 

69TermText = i”,Chars

 

01TermFreq = 1VInt

 

00Position/Offset = 0VInt

 

06TermTextPrefixLength = 6VInt

 

6C 65 74 74 65 72TextText = letter”,VInt

 

02TermFreq = 2VInt

 

00Position/Offset = 0VInt

 

05TermTextPrefixlength = 5VInt

 

77 72 69 74 65TermText = write”,Chars

 

01Position/Offset = 1VInt

 

 

12.Compound File

 

文件名称:SegmentName.cfs

 

 

说明:当采用复合文件建立索引时,所有索引文件会保存在一个.cfs文件内。

 

 

格式:FileCount<DataOffsetFileName>FielCountFileDataFielCount

 

FielCountVInt

 

DataOffsetUInt64

 

FileNameString

 

FielData:文件原始数据(raw file data

 

 

格式说明:

 

 

示例:

 

 

 

0BFileCount = 8VInt

 

00 00 00 00 00 00 00 A6DataOffset = 166UInt64

 

06FileNamePrefixLength = 6VInt

 

5F 30 2E 66 6E 6DFileName = _0.fnm”,Chars

 

根据文件数据偏移量(DataOffset 166,可以知道字段信息文件(Field Info)“_0.fnm”的数据存储起始位置在167处。其他文件类