随笔 - 17  文章 - 84  trackbacks - 0
<2007年6月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

如非特别说明,所有文章均为原创。如需引用,请注明出处
Email:liangtianyu@gmail.com
MSN:terry.liangtianyu@hotmail.com

常用链接

留言簿(4)

随笔分类(12)

随笔档案(17)

最新随笔

搜索

  •  

积分与排名

  • 积分 - 51513
  • 排名 - 960

最新评论

阅读排行榜

评论排行榜

  Lucene 2.10索引文件:

Term:项。为分词后最小单位,具体和使用的分析器有关,Lucene内置为单字。

Field:域。相当于数据库表的字段。

Document:文档。域信息的集合。

Segment:段。一个完整定1索引。

 

文件名称

后缀名称

说明

segments_N

 

段,表示一个完整独立的索引;N36进制数

segments

.gen

segments辅助文件,主要用来生成计数

SegmentName

.fnm

域集合信息文件

SegmentName

.fdt

域值信息文件

SegmentName

.tis

项信息文件

SegmentName

.tii

项信息索引文件

SegmentName

.frq

项频数文件

SegmentName

.prx

项位置信息文件

SegmentName

nrm

标准化因子文件

SegmentName

.tvx

文档信息索引文件

SegmentName

.tvd

文档信息文件

SegmentName

..tvf

每个域项向量信息文件

备注

SegmentName_NN36进制数


一.          
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处。其他文件类
posted on 2007-06-14 14:45 Terry Liang 阅读(2495) 评论(3)  编辑  收藏 所属分类: Lucene 2.1研究

FeedBack:
# re: Lucene 2.1研究:文件存储 2007-06-15 08:56 good
good.............  回复  更多评论
  
# re: Lucene 2.1研究:文件存储 2007-06-16 01:11 geszjava
thanks  回复  更多评论
  
# re: Lucene 2.1研究:文件存储 2007-08-13 14:38 web
兄台,我对lucene的高位优先一直没有搞太明白,是否数据先写到高位,高位被占满然后再写低位呢?

DocumentWriter.java 里面有这段代码:

if (f == 1) // optimize freq=1
freq.writeVInt(1); // set low bit of doc num.
else {
freq.writeVInt(0); // the document number
freq.writeVInt(f); // frequency in doc
}

想知道最后写出来的结果是啥样子的。
万望指教,谢谢!

还有lucene里面的文档号是递增的,请问是在什么地方体现的呢?

  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: