官术网_书友最值得收藏!

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()方法設定是否使用復合文件格式。

主站蜘蛛池模板: 凤山市| 宜丰县| 册亨县| 磴口县| 三明市| 仙居县| 南木林县| 涿州市| 桐乡市| 科技| 深州市| 安顺市| 黄浦区| 澄城县| 林西县| 叙永县| 博兴县| 靖江市| 南宁市| 郁南县| 巴楚县| 于田县| 固始县| 保靖县| 九龙城区| 五原县| 清新县| 白朗县| 合山市| 津南区| 申扎县| 怀仁县| 玛曲县| 会昌县| 罗甸县| 渭源县| 友谊县| 赣榆县| 富源县| 盐池县| 高尔夫|