Lucene 2.10索引文件:
Term:項。為分詞后最小單位,具體和使用的分析器有關(guān),Lucene內(nèi)置為單字。
Field:域。相當(dāng)于數(shù)據(jù)庫表的字段。
Document:文檔。域信息的集合。
Segment:段。一個完整定1索引。
文件名稱
|
后綴名稱
|
說明
|
segments_N
|
|
段,表示一個完整獨立的索引;N為36進(jìn)制數(shù)
|
segments
|
.gen
|
segments輔助文件,主要用來生成計數(shù)
|
SegmentName
|
.fnm
|
域集合信息文件
|
SegmentName
|
.fdt
|
域值信息文件
|
SegmentName
|
.tis
|
項信息文件
|
SegmentName
|
.tii
|
項信息索引文件
|
SegmentName
|
.frq
|
項頻數(shù)文件
|
SegmentName
|
.prx
|
項位置信息文件
|
SegmentName
|
nrm
|
標(biāo)準(zhǔn)化因子文件
|
SegmentName
|
.tvx
|
文檔信息索引文件
|
SegmentName
|
.tvd
|
文檔信息文件
|
SegmentName
|
..tvf
|
每個域項向量信息文件
|
備注
|
SegmentName為_N,N為36進(jìn)制數(shù)
|
一.
Lucene原始存儲數(shù)據(jù)類型(Primitive Types)
類型名稱
|
說明
|
Byte
|
8 byte
|
UInt32
|
32 byte四字節(jié)無符號整型,高位優(yōu)先
|
UInt64
|
64byte八字節(jié)無符號整型,高位優(yōu)先
|
VInt
|
可變長度整型。0-127單字節(jié),128-16383兩字節(jié),類推
|
Chars
|
UNICODE字符串
|
String
|
寫入格式為:VInt,Chars,字符串長度加字符串
|
二. Lucene索引文件
1. Segments
文件名稱:segments_N,N為36進(jìn)制數(shù)。
說明:在一個索引目錄中,至少存在一個Segments文件,但可索引活動的只會有一個:N值最大的。其他的Segments文件可能為臨時文件,一般情況是索引修改進(jìn)程沒有完成。
格式:Format,Version,NameCounter,SegCount,<SegName,SegSize,DelGen,HasSingleNormFile,NumField,NormGenNumField,IsCompoundFile>SegCount
Format,NameCounter,SegCount,SegCount,SegSize,NumField:UInt32
Version,DelGen,NormGen:UInt64
SegName:String
IsCompound,HasSingleNormFile:Byte
格式說明:Format = SegmentInfos.FORMAT_SINGLE_NORM_FILE = -2;Version當(dāng)前時間與UTC時間的差值的毫秒數(shù),每次對索引進(jìn)行修改時會變化;SegName是所有索引生成文件的前綴;SegSize是當(dāng)前Segment中包含的Document的數(shù)量;
示例:

FF FF FF FD:FOMAT = -2,UInt32
00 00 01 13 29 30 B6 33:Version = 1181807064627,UInt64
00 00 00 01:NameCount = 1,UInt32
00 00 00 01:SegmentCount = 1,UInt32
02:SegmentNamePrefixLength = 2,VInt
5F 30:SegmentName = “_0”,Chars
00 00 00 01:SegSize = 1,UInt32
FF FF FF FF FF FF FF FF:DelGen = -1,UInt64
01:HasSingleNormFile = 1,Byte
FF FF FF FF:NumField = -1,UInt32
FF:IsCompoundFile = -1,Byte
在2.1版本中還會生成segment.gen文件,主要保存了索引計數(shù),格式為:Version(SegmentInfos.LOCKLESS = -2),Generation,Generation。
示例:

FF FF FF FE:Version = -2,UInt32
00 00 00 00 00 00 00 02:Generation = 2,UInt64
00 00 00 00 00 00 00 02:Generation = 2,UInt64
2. Field Info
文件名稱:SegmentName.fnm。
說明:保存了所有Field的名稱。
格式:FieldCount,<FieldName,FieldBits>FieldCount
FieldCount:VInt
FieldName:String
FieldBits:Byte
格式說明:
示例:

01:FieldCount = 1,VInt
04:FieldNamePrefixLength = 4,VInt
49 6E 66 6F:FieldName = “Info”,Chars
01:Bits = 1,Byte
3. Stored Field Index
文件名稱:SegmentName.fdx
說明:保存了每個Document的Field Data的地址指針
格式:<FieldValuesPosition>SegSize
FieldValuesPosition:UInt64
格式說明:
示例:

00 00 00 00 00 00 00 00:FieldValuesPosition = 0,UInt64
4. Stroed Field Data
文件名稱:SegmentName.fdt
說明:保存了每個Document的需要存儲的Field數(shù)據(jù)。
格式:<DocFieldData>SegSize
DocFieldData:FieldCount,<FieldNum,Bits,Value>FieldCount
FieldCount:VInt
FieldNum:Vint
Bits:Byte
Value:String | BinaryValue(取決于Bits)
BinaryValue:ValueSize,<Byte>^ValueSize
ValueSize:VInt
格式說明:
示例:

01:FieldCount = 1,VInt
00:FieldNum = 0,VInt
01:Bits = 1,Byte
17:FieldValuePrefixLength = 23,VInt
49 20 77 72 69 74 65 20 61 20 6C 65 74 74 65 72 20 6C 65 74 74 65 72:Value = “I write a letter letter”,Chars
5. Term Info Index
文件名稱:SegmentName.tii
說明:保存了所有Term Inofs(.its)文件的索引間隔條目。
格式:TIVersion,IndexTermCount,IndexInterval,SkipIntervala,MaxSkipLevels,TermIndices
TIVersion:UInt32
IndexTermCount:UInt64
IndexInterval:UInt32
SkipInterval:UInt32
TermIndeices:<TermInfo,IndexDelta>IndexTermCount
IndexDelta:VInt
格式說明:
示例:

FF FF FF FE:TIVersion = -2,UInt32
00 00 00 00 00 00 00 01:TermCount = 1,UInt64
00 00 00 08:IndexInterval = 128,UInt32
00 00 00 10:SkipInterval = 16,UInt32
00:MaxSkipLevels = 0,Byte
6. Term Infos
文件名稱:SegmentName.tis
說明:存儲了所有Term的信息。
格式:TIVersion,IndexTermCount,IndexInterval,SkipIntervala,MaxSkipLevels,TIVersion:UInt32
IndexTermCount:UInt64
IndexInterval:UInt32
SkipInterval:UInt32
MaxSkipLevels:VInt
TermInfos:<Term,DocFreq,FreqDelta,ProxDelta,SkipDelta>TermCount
Term:<PriefixLength,Suffix,FieldNum>
格式說明:Term按照字典順序排序;Term的內(nèi)容是可以共享的。例如:上一個Term為“bone”,當(dāng)前Term為“boy”,則當(dāng)前的Temr的PrefixLength為2,Suffix為“y”。
示例:

FF FF FF FE:TIVersion = -2,UInt32
00 00 00 00 00 00 00 01:TermCount = 1,UInt64
00 00 00 08:IndexInterval = 128,UInt32
00 00 00 10:SkipInterval = 16,UInt32
00:MaxSkipLevels = 0,Byte
01:TermTextPrefixLength = 1,VInt
69:TermText = “i”,Chars
00:FieldNumber = 0,VInt
01:DocFreq = 1,VInt
00:FreqDelta = 0,VInt
00:ProxDelta = 0,VInt
00:SkipDelta = 0,Vint
以下Term類似
7:Frequencies File
文件名稱:SegmentName.frq
說明:
格式:
格式說明:
示例:

8. Positions File
文件名稱:SegmentName.prx
說明:保存了每個Term在Document中的位置集合。
格式:
格式說明:
示例:

9.TermVectors Iindex File
文件名稱:SegmentName.tvx
說明:保存了在.tvd中的文檔數(shù)據(jù)的指針。
格式:TVXVersion,<DocumentPosition>NumDocs
TVXVersion:UInt32
DcoumentPosition:UInt64
格式說明:
示例:

00 00 00 02:TVXVersion = 2,UInt32
00 00 00 00 00 00 00 04:DocumentPosition = 4,UInt64
10.Term Vectors Document
文件名稱:SegmentName.tvd
說明:
格式:TVDVersion,<NumFields,FieldNums,FieldPositions>NumDocs
TVDVersion:UInt32
NumFields:VInt
FieldNums:<FieldNumDelta >NumFields
FieldPosition:VInt
格式說明:
示例:

00 00 00 02:TVDVersion = 2,UInt32
01:NumFields = 1,VInt
00:FieldNumDelta = 0,VInt
04:FieldPosition = 4,VInt
11.Term Vectors Field
文件名稱:SegmentName.tvf
說明:
格式:TVFVersion,<NumTerms,Position/Offset,TermFreqs>NumFields
TVFVersion:UInt32
NumTerms:VInt
Position/Offset:Byte
TermFreqs:<TermText,TermFreq,Positions/Offsets>NumTerms
TermText:<PrefixLength,Suffix>
PrefixLength:VInt
Suffix:Chars
TermFreq:VInt
Position:<VInt>TermFreq
Offsets:<VInt,VInt>TermFreq
格式說明:
示例:

00 00 00 02:TVFVersion = 2,UInt32
03:NumTerms = 3,VInt
00:
00:
01:TermTextPrefixLength = 1,VInt
69:TermText = “i”,Chars
01:TermFreq = 1,VInt
00:Position/Offset = 0,VInt
06:TermTextPrefixLength = 6,VInt
6C 65 74 74 65 72:TextText = “letter”,VInt
02:TermFreq = 2,VInt
00:Position/Offset = 0,VInt
05:TermTextPrefixlength = 5,VInt
77 72 69 74 65:TermText = “write”,Chars
01:Position/Offset = 1,VInt
12.Compound File
文件名稱:SegmentName.cfs
說明:當(dāng)采用復(fù)合文件建立索引時,所有索引文件會保存在一個.cfs文件內(nèi)。
格式:FileCount,<DataOffset,FileName>FielCount,FileDataFielCount
FielCount:VInt
DataOffset:UInt64
FileName:String
FielData:文件原始數(shù)據(jù)(raw file data)
格式說明:
示例:

0B:FileCount = 8,VInt
00 00 00 00 00 00 00 A6:DataOffset = 166,UInt64
06:FileNamePrefixLength = 6,VInt
5F 30 2E 66 6E 6D:FileName = “_0.fnm”,Chars
根據(jù)文件數(shù)據(jù)偏移量(DataOffset) 166,可以知道字段信息文件(Field Info)“_0.fnm”的數(shù)據(jù)存儲起始位置在167處。其他文件類
posted on 2007-06-14 14:45
Terry Liang 閱讀(2505)
評論(3) 編輯 收藏 所屬分類:
Lucene 2.1研究