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

          如非特別說明,所有文章均為原創(chuàng)。如需引用,請注明出處
          Email:liangtianyu@gmail.com
          MSN:terry.liangtianyu@hotmail.com

          常用鏈接

          留言簿(4)

          隨筆分類(12)

          隨筆檔案(17)

          最新隨筆

          搜索

          •  

          積分與排名

          • 積分 - 51901
          • 排名 - 962

          最新評論

          閱讀排行榜

          評論排行榜

            Lucene 2.10索引文件:

          Term:項(xiàng)。為分詞后最小單位,具體和使用的分析器有關(guān),Lucene內(nèi)置為單字。

          Field:域。相當(dāng)于數(shù)據(jù)庫表的字段。

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

          Segment:段。一個(gè)完整定1索引。

           

          文件名稱

          后綴名稱

          說明

          segments_N

           

          段,表示一個(gè)完整獨(dú)立的索引;N36進(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_NN36進(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

          寫入格式為:VIntChars,字符串長度加字符串

           

          二.           Lucene索引文件

          1.  Segments

          文件名稱:segments_NN36進(jìn)制數(shù)。

           

          說明:在一個(gè)索引目錄中,至少存在一個(gè)Segments文件,但可索引活動(dòng)的只會(huì)有一個(gè):N值最大的。其他的Segments文件可能為臨時(shí)文件,一般情況是索引修改進(jìn)程沒有完成。

           

          格式:FormatVersionNameCounterSegCount<SegNameSegSizeDelGenHasSingleNormFileNumFieldNormGenNumFieldIsCompoundFile>SegCount

          FormatNameCounterSegCountSegCountSegSizeNumFieldUInt32

          VersionDelGenNormGenUInt64

          SegNameString

          IsCompoundHasSingleNormFileByte

           

          格式說明:Format = SegmentInfos.FORMAT_SINGLE_NORM_FILE = -2Version當(dāng)前時(shí)間與UTC時(shí)間的差值的毫秒數(shù),每次對索引進(jìn)行修改時(shí)會(huì)變化;SegName是所有索引生成文件的前綴;SegSize是當(dāng)前Segment中包含的Document的數(shù)量;

           

          示例:

          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版本中還會(huì)生成segment.gen文件,主要保存了索引計(jì)數(shù),格式為: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

           

          說明:保存了每個(gè)DocumentField Data的地址指針

           

          格式:<FieldValuesPosition>SegSize

          FieldValuesPositionUInt64

           

          格式說明:

           

          示例:

           

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

           

          4.  Stroed Field Data

          文件名稱:SegmentName.fdt

           

          說明:保存了每個(gè)Document的需要存儲(chǔ)的Field數(shù)據(jù)。

           

          格式:<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

           

          說明:存儲(chǔ)了所有Term的信息。

           

          格式:TIVersionIndexTermCountIndexIntervalSkipIntervalaMaxSkipLevelsTIVersionUInt32

          IndexTermCountUInt64

          IndexIntervalUInt32

          SkipIntervalUInt32

          MaxSkipLevelsVInt

          TermInfos<TermDocFreqFreqDeltaProxDeltaSkipDelta>TermCount

          Term<PriefixLengthSuffixFieldNum>

           

          格式說明:Term按照字典順序排序;Term的內(nèi)容是可以共享的。例如:上一個(gè)Term為“bone”,當(dāng)前Term為“boy”,則當(dāng)前的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

           

          說明:保存了每個(gè)TermDocument中的位置集合。

           

          格式:

           

          格式說明:

           

          示例:

           

          9.TermVectors Iindex File

          文件名稱:SegmentName.tvx

           

          說明:保存了在.tvd中的文檔數(shù)據(jù)的指針。

           

          格式: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

           

          說明:當(dāng)采用復(fù)合文件建立索引時(shí),所有索引文件會(huì)保存在一個(gè).cfs文件內(nèi)。

           

          格式:FileCount<DataOffsetFileName>FielCountFileDataFielCount

          FielCountVInt

          DataOffsetUInt64

          FileNameString

          FielData:文件原始數(shù)據(jù)(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

          根據(jù)文件數(shù)據(jù)偏移量(DataOffset 166,可以知道字段信息文件(Field Info)“_0.fnm”的數(shù)據(jù)存儲(chǔ)起始位置在167處。其他文件類
          posted on 2007-06-14 14:45 Terry Liang 閱讀(2506) 評論(3)  編輯  收藏 所屬分類: Lucene 2.1研究

          FeedBack:
          # re: Lucene 2.1研究:文件存儲(chǔ) 2007-06-15 08:56 good
          good.............  回復(fù)  更多評論
            
          # re: Lucene 2.1研究:文件存儲(chǔ) 2007-06-16 01:11 geszjava
          thanks  回復(fù)  更多評論
            
          # re: Lucene 2.1研究:文件存儲(chǔ) 2007-08-13 14:38 web
          兄臺,我對lucene的高位優(yōu)先一直沒有搞太明白,是否數(shù)據(jù)先寫到高位,高位被占滿然后再寫低位呢?

          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
          }

          想知道最后寫出來的結(jié)果是啥樣子的。
          萬望指教,謝謝!

          還有l(wèi)ucene里面的文檔號是遞增的,請問是在什么地方體現(xiàn)的呢?

            回復(fù)  更多評論
            
          主站蜘蛛池模板: 乐东| 明溪县| 兰西县| 聊城市| 游戏| 攀枝花市| 启东市| 黄冈市| 台前县| 赣榆县| 七台河市| 思茅市| 米林县| 金平| 高要市| 太仓市| 望谟县| 大庆市| 山东| 洪泽县| 威远县| 滦南县| 万年县| 盈江县| 探索| 鸡西市| 岳西县| 黄梅县| 万盛区| 江油市| 江北区| 晋中市| 饶河县| 仙桃市| 文成县| 克什克腾旗| 南阳市| 梁山县| 岢岚县| 嘉黎县| 平原县|