Terms數(shù)據(jù) 磁盤文件存儲細節(jié)
?
從這篇開始,已經(jīng)涉及到倒排索引表的信息存儲問題了。我們都知道倒排索引表中的Dictionary有許多不同的terms組成,Lucene關(guān)于這些terms數(shù)據(jù)的存儲,就放在磁盤的.tii和.tis文件中。
?
★ .tii? 詞典 索引文件 ?? .tis? 詞典數(shù)據(jù)文件
?
1、tii 保存了tis中每 隔 IndexInterval個詞的位置信息,這是為了加快對詞典文件tii中詞的查找速度
?
具體結(jié)構(gòu)如下:
?TermInfoIndex (.tii)-->? TIVersion, IndexTermCount, IndexInterval, SkipInterval, MaxSkipLevels, TermIndices
TIVersion --> UInt32?? 版本號
IndexTermCount --> UInt64?? 詞典索引文件中包含的詞數(shù)。
IndexInterval --> UInt32? (同tis)
SkipInterval --> UInt32? (同tis)
TermIndices -->? <TermInfo, IndexDelta>
IndexTermCount
???? IndexTermCount 個項的數(shù)組,每一項包括兩部分,第一部分是詞本身(TermInfo),第二部分是在詞典.tis文件中的偏移量(IndexDelta)。假設(shè)IndexInterval為 4,此數(shù)組中保存第4個,第8個,第12個詞。
?
TermInfo --> <Term, DocFreq, FreqDelta, ProxDelta, SkipDelta>? (同 tis)
IndexDelta --> VLong? 用來確定該 Term 的 TermInfo 在 .tis 文件中的位置, 特別指出,它是該 term 的數(shù)據(jù)的位置與前一個 term 位置的差值。 (關(guān)于差值規(guī)則請參見:《 索引文件格式(1):基礎(chǔ)知識 》
?
2、tis 存放索引表中Dictionary的所有Term的信息。
?
具體結(jié)構(gòu)如下:
TermInfoFile (.tis)--> TIVersion, TermCount, IndexInterval, SkipInterval, MaxSkipLevels, TermInfos
?
TIVersion --> UInt32? 版本號
TermCount --> UInt64? 詞典中包含的總的詞數(shù)
IndexInterval --> UInt32? 為了加快對詞的查找速度,也應(yīng)用類似跳躍表的結(jié)構(gòu),假設(shè)IndexInterval為4,則在詞典索引(tii)文件中保存第4個,第8個,第12個詞,這樣可以加快在詞典文件中查找詞的速度。
SkipInterval --> UInt32?? 倒排表無論是文檔號及詞頻,還是位置信息,都是以跳躍表的結(jié)構(gòu)存在的,SkipInterval是跳躍的步數(shù)。
MaxSkipLevels --> UInt32? 跳躍表是多層的,這個值指的是跳躍表的最大層數(shù)。
?
TermInfos --> <TermInfo> TermCount ???? TermCount個項的數(shù)組,每一項代表一個具體詞的信息。單個TermInfo 的結(jié)構(gòu)如下: TermInfo --> <Term, DocFreq, FreqDelta, ProxDelta, SkipDelta> 其中:
Term --> <PrefixLength, Suffix, FieldNum> 詞語文本信息
PrefixLength -->VInt??? 前綴規(guī)則中的前綴長度
Suffix--> String?? 利用前綴規(guī)則存放詞的文本信息(關(guān)于前綴規(guī)則請參見:《 索引文件格式(1):基礎(chǔ)知識 》)。
FieldNum--> VInt? 詞屬于的域的域號
?
DocFreq--> VInt? 有多少篇文檔包含此詞
FreqDelta ,ProxDelta --> VInt?? 此詞的詞頻和位置信息在frq,prx中的偏移地址
SkipDelta --> VInt ?
?
?
★? 專題用例 :
?
?關(guān)于例子的詳細信息參見《 索引文件格式(2):文件 結(jié)構(gòu)總體框架 》最后的說明。
(1) 解釋一下tii文件的數(shù)據(jù)
◆ ? tii文件最重要的一個就是IndexInterval。它表明了tii中記錄了tis中每隔IndexInterval個Term的起始地址。
?
(2) 解釋一下tis文件的數(shù)據(jù)
◆ 我們將name ,path, content域都建立了索引,但name, path域并沒有用Analyzer 進行分詞。因此會出現(xiàn)像:"e:\實驗\content\lucene 1.txt"這樣的Term。
?
◆ ? 所有term都以前綴規(guī)則來存儲,這一點在上圖中很明顯。
? ???
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

