- 自己動手寫分布式搜索引擎
- 羅剛
- 1281字
- 2020-11-28 15:52:46
3.2.9 索引文件格式
在Lucene中,倒排索引結構存儲在二進制格式的多個索引文件中,其中以tis為后綴的文件中包含單詞信息;frq后綴的文件記錄單詞的文檔編號和這個單詞在文檔中出現了多少次,也就是頻率信息;prx后綴的文件包含單詞出現的位置信息。
Lucene把和一個索引相關的文件全部放在一個目錄下。其中既存儲描述索引結構的元數據,又包含索引數據。每類信息放在不同后綴的二進制文件中。元數據包含以fnm為后綴的列信息文件。列信息文件的格式如下:
字段數量,<字段名稱,字段的二進制位描述>
其中,“字段數量”表示索引中字段的數量;“字段名稱”是用字符串表示的字段的名稱;“字段的二進制位描述”是個byte值和int值。byte值用1個最低位表示是否索引這個字段。
例如:
doc.add(new Field("text", "content", Field.Store.NO, Field.Index.TOKENIZED));
在列信息文件中存儲成:
1, <content, 0x01>
詞典文件以tis為后綴。這個文件中的詞是按順序存放的。詞首先按詞對應的字段名稱排序,然后按詞的正文排序。詞典文件的格式如下:
詞的數量,<詞,詞的文檔頻率>
詞用前綴壓縮的方式存儲,格式是:前綴的長度,后綴,字段編號。“詞的文檔頻率”指詞在多少個文檔中出現過。排好序的詞表中,前后兩個詞往往包括共同的前綴。“前綴的長度”變量是表示與前一項相同的前綴的字數。例如,如果前一個詞是“bone”,后一個是“boy”的話,前綴的長度值為2,后綴值為“y”。
例如有兩個文檔,內容如下。
文檔1:Penn State Football …football。
文檔2:Football players … State。
在索引中的存儲形式如下:
4, <<0, football,1>,2> <<0, penn,1>, 1> <<1, layers,1>,1> <<0, state,1>,2>
詞典文件太大,為了能把詞信息完整地讀入內存,設計出了詞信息索引文件(.tii)。詞信息索引文件不存儲詞本身,但是保存隨機讀取的文件的位置信息。
詞在文檔中出現的頻率文件以frq為文件后綴。詞頻率首先是按照tis中的詞序來排列,在每個詞存儲信息,存儲這個詞在文檔中出現的頻率,按照docID排序。頻率文件中并沒有存儲docID,而是存儲與前后兩個docID的增量相關的一個值DocDelta。頻率文件的格式如下:
<DocDelta[, Freq? ]>
DocDelta同時決定了文檔號和頻數。詳細地說,DocDelta/2表示當前docID相對于前一個docID的偏移量(或者是0,表示這是TermFreqs里面的第一項)。當DocDelta是奇數時表示在該文檔中頻數為1;當DocDelta是偶數時,則下一個整數表示在該文檔中出現的頻數。
例如,假設某一項在文檔7中出現1次,在文檔11中出現3次,在TermFreqs中就存在如下的整數序列:15, 8, 3。
在這里:
15=2*7+1,在文檔7中出現頻率是1。
8=2*(11-7),在文檔11中出現頻率>1。
3,在文檔11中出現頻率=3。
Posting List見表3-3,其對應的頻率文件存儲內容如下:
表3-3 Posting List

<<2, 2, 3> <3> <5> <3, 3>>
存儲詞在文檔中出現過的位置的位置文件以prx為后綴。TermPositions按照詞來排序(依據tis文件中詞的位置)。Positions數值按照docID升序排列。實際存儲的是PositionDelta值,PositionDelta是當前位置相對于前一個出現位置(或者為0,表示這是第一次在這個文檔中出現)的增量值。例如,假設某詞在某文檔第4項出現,在接下來的一個文檔中第5項和第9項出現,將表示為如下的整數序列:4, 5, 4。表3-3對應的位置文件的存儲內容如下:
<<3, 64> <1>> <<1> <0>> <<0> <2>> <<2> <13>>
從索引數據可以看出,索引數據是以詞為中心組織的。TermPositions類提供了用來遍歷一個詞的<文檔,頻率,<位置>* >元組的方法。
Lucene的查詢過程訪問的文件如圖3-6所示。

圖3-6 查詢訪問文件
復合文件格式的索引優化后只有3個文件,其中segments_N和segments.gen是固定不變的,因為這兩個文件是在索引級別存在的文件,還有一個是復合索引文件格式(.cfs)。可以通過setUseCompoundFile()方法設定是否使用復合文件格式。
- JBoss AS 5 Development
- DotNetNuke 5.4 Cookbook
- Creo 4.0中文版從入門到精通
- Photoshop CC超級學習手冊
- Hi!扁平化Photoshop扁平化用戶界面設計教程
- Photoshop+CorelDRAW平面設計實例教程(第4版)
- After Effects中文版入門、精通與實戰
- Vue 企業開發實戰
- 人人都能玩賺AI繪畫
- Microsoft Azure: Enterprise Application Development
- SVG動畫
- 無師自通AutoCAD 2014中文版機械設計
- Joomla! with Flash
- Photoshop CC中文版基礎教程
- 玩轉掌上生活 手機網上生活達人秘笈