在實際的搜索引擎系統中,倒排索引項中的實際文檔號並沒有被存儲,而是被文檔號差(D-Gap)所代替。文檔號差是倒排表中兩個相鄰倒排索引項的文檔號之差。壹般在索引構建過程中,可以保證倒排表中後面出現的文檔號大於前面出現的文檔號,所以文檔號差總是大於0的整數。在圖2所示的例子中,原來的三個單據號分別是187、196和199,通過號差的計算,在實際存儲時轉換為:187、9和3。
計算文檔號差異的主要原因是為了更好地壓縮數據。原始文檔編號通常是較大的值。通過差值計算,可以有效地將大值轉換成小值,有助於提高數據的壓縮率。索引的構建相當於從正向表到反向表的建立過程。當我們分析完網頁後,得到了壹個以網頁為主要代碼的索引表。索引建立後,應該會得到倒排表,具體流程如下所示:
該過程描述如下:
1)將文檔分析稱為word $ term標記,
2)使用散列來復制單詞$ term 3)生成單詞的倒排列表。倒排表是文檔號DocID,不包含其他信息(如詞頻、詞位等。).這是壹個簡單的索引。這個簡單的索引功能可以用於小數據,例如索引數千個文檔。但是它有兩個限制:1)它需要足夠的內存來存儲倒排表。對於搜索引擎來說,都是G級的數據,尤其是在規模不斷擴大的情況下,我們不可能提供這麽大的內存。2)算法順序執行,不便於並行處理。合並法,即每次內存中的數據寫入磁盤時,將包括字典在內的中間結果信息全部寫入磁盤,這樣就可以清空內存的所有內容,將所有的配額內存用於後續的索引。
如圖所示:
合並過程:
1)頁面分析,生成臨時倒排數據索引A和B,當臨時倒排數據索引A和B內存滿時,將內存索引A和B寫入臨時文件,生成臨時倒排文件。2)將生成的臨時倒排文件進行多種方式的合並,輸出最終的倒排文件。
索引創建過程中的頁面分析,尤其是中文分詞,是主要的時間支出。算法的第二步相對較快。該算法的優化集中在中文分詞的效率上。