Lucene 2.10索引文件:
Term:項(xiàng)。為分詞后最小單位,具體和使用的分析器有關(guān),Lucene內(nèi)置為單字。
Field:域。相當(dāng)于數(shù)據(jù)庫表的字段。
Document:文檔。域信息的集合。
Segment:段。一個(gè)完整定1索引。
文件名稱 |
后綴名稱 |
說明 |
segments_N |
|
段,表示一個(gè)完整獨(dú)立的索引;N為36進(jìn)制數(shù) |
segments |
.gen |
segments輔助文件,主要用來生成計(jì)數(shù) |
SegmentName |
.fnm |
域集合信息文件 |
SegmentName |
.fdt |
域值信息文件 |
SegmentName |
.tis |
項(xiàng)信息文件 |
SegmentName |
.tii |
項(xiàng)信息索引文件 |
SegmentName |
.frq |
項(xiàng)頻數(shù)文件 |
SegmentName |
.prx |
項(xiàng)位置信息文件 |
SegmentName |
nrm |
標(biāo)準(zhǔn)化因子文件 |
SegmentName |
.tvx |
文檔信息索引文件 |
SegmentName |
.tvd |
文檔信息文件 |
SegmentName |
..tvf |
每個(gè)域項(xiàng)向量信息文件 |
備注 |
SegmentName為_N,N為36進(jìn)制數(shù) |
一. Lucene原始存儲(chǔ)數(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ù)。
說明:在一個(gè)索引目錄中,至少存在一個(gè)Segments文件,但可索引活動(dòng)的只會(huì)有一個(gè):N值最大的。其他的Segments文件可能為臨時(shí)文件,一般情況是索引修改進(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)前時(shí)間與UTC時(shí)間的差值的毫秒數(shù),每次對索引進(jìn)行修改時(shí)會(huì)變化;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
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版本中還會(huì)生成segment.gen文件,主要保存了索引計(jì)數(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
01:Bits = 1,Byte
3. Stored Field Index
文件名稱:SegmentName.fdx
說明:保存了每個(gè)Document的Field Data的地址指針
格式:<FieldValuesPosition>SegSize
FieldValuesPosition:UInt64
格式說明:
示例:
00 00 00 00 00 00 00 00:FieldValuesPosition = 0,UInt64
4. Stroed Field Data
文件名稱:SegmentName.fdt
說明:保存了每個(gè)Document的需要存儲(chǔ)的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
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
說明:存儲(chǔ)了所有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)容是可以共享的。例如:上一個(gè)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
說明:保存了每個(gè)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
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ù)合文件建立索引時(shí),所有索引文件會(huì)保存在一個(gè).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
06:FileNamePrefixLength = 6,VInt