倒排索引 搜尋引擎的基石

2021-06-15 10:18:57 字數 3544 閱讀 7934

在關係資料庫系統裡,索引是檢索資料最有效率的方式,

。但對於搜尋引起,他它並不能滿足其特殊要求:

1)海量資料

2)資料操作簡單

:搜尋引擎使用的資料操作簡單 ,一般而言 ,只需要增、 刪、 改、 查幾個功能 ,而且資料都有特定的格式 ,可以針對這些應用設計出簡單高效的應用程式。而一般的資料庫系統則支援大而全的功能 ,同時損失了速度和空間。最後 ,搜尋引擎面臨大量的使用者檢索需求 ,這要求搜尋引擎在檢索程式的設計上要分秒必爭 ,盡可能的將大運算量的工作在索引建立時完成 ,使檢索運算盡量的少。一般的資料庫系統很難承受如此大量的使用者請求 ,而且在檢索響應時間和檢索併發度上都不及我們專門設計的索引系統。

來自維基百科定義:

倒排索引(英語:inverted index),也常被稱為反向索引、置入檔案或反向檔案,是一種索引方法,被用來儲存在全文搜尋下某個單詞在乙個文件或者一組文件中的儲存位置的對映。它是文件檢索系統中最常用的資料結構。通過倒排索引,可以根據單詞快速獲取包含這個單詞的文件列表。倒排索引主要由兩個部分組成:「單詞詞典」和「倒排檔案」。

是實現單詞到文件對映關係的最佳實現方式和最有效的索引結構.

倒排索引的簡單例項:

搜尋引擎-倒排索引基礎知識

倒排列表用來記錄有哪些文件包含了某個單詞。一般在文件集合裡會有很多文件包含某個單詞,每個文件會記錄文件編號(docid),單詞在這個文件中出現的次數(tf)及單詞在文件中哪些位置出現過等資訊,這樣與乙個文件相關的資訊被稱做倒排索引項(posting),包含這個單詞的一系列倒排索引項形成了列表結構,這就是某個單詞對應的倒排列表。圖1是倒排列表的示意圖,在文件集合中出現過的所有單詞及其對應的倒排列表組成了倒排索引。

圖1 倒排列表

在實際的搜尋引擎系統中,並不儲存倒排索引項中的實際文件編號,而是代之以文件編號差值(d-gap)。文件編號差值是倒排列表中相鄰的兩個倒排索引項文件編號的差值,一般在索引構建過程中,可以保證倒排列表中後面出現的文件編號大於之前出現的文件編號,所以文件編號差值總是大於0的整數。如圖2所示的例子中,原始的 3個文件編號分別是187、196和199,通過編號差值計算,在實際儲存的時候就轉化成了:187、9、3。

圖2  文件編號差值

之所以要對文件編號進行差值計算,主要原因是為了更好地對資料進行壓縮,原始文件編號一般都是大數值,通過差值計算,就有效地將大數值轉換為了小數值,而這有助於增加資料的壓縮率。

4.1 簡單索引構建

索引的構建相當於從正排表到倒排表的建立過程。當我們分析完網頁時 ,得到的是以網頁為主碼的索引表。當索引建立完成後 ,應得到倒排表 ,具體流程如圖3所示:

圖3  索引構建

流程:1)將文件分析稱單詞term標記,

2)使用hash去重單詞term

3)對單詞生成倒排列表

倒排列表就是文件編號docid,沒有包含其他的資訊(如詞頻,單詞位置等),這就是簡單的索引。

這個簡單索引功能可以用於小資料,例如索引幾千個文件。然而它有兩點限制:

1)需要有足夠的記憶體來儲存倒排表,對於搜尋引擎來說, 都是g級別資料,特別是當規模不斷擴大時 ,我們根本不可能提供這麼多的記憶體。

2)演算法是順序執行,不便於並行處理。

4.3 合併法建立索引

歸併法,即每次將記憶體中資料寫入磁碟時,包括詞典在內的所有中間結果資訊都被寫入磁碟,這樣記憶體所有內容都可以被清空,後續建立索引可以使用全部的定額記憶體。

如圖4 歸併示意圖:

圖4:歸併索引

合併流程如圖5:

1)頁面分析,生成臨時倒排資料索引a,b,當臨時倒排資料索引a,b佔滿記憶體後,將記憶體索引a,b寫入臨時檔案生成臨時倒排檔案,

2)  對生成的多個臨時倒排檔案 ,執行多路歸併 ,輸出得到最終的倒排檔案 ( inverted file)。

圖5 合併流程

索引建立過程中的頁面分析 ,特別是中文分詞為主要時間開銷。演算法的第二步相對很快。這樣建立演算法的優化集中在中文分詞效率上。

4.2 並行與分布式建立索引

在 搜尋引擎-網路爬蟲, 已經提到雲儲存文件,使用map/reduce平行計算模型,對文件生成倒排索引列:

對於建立倒排索引這個任務來說,如圖6所示,輸入資料也是網頁,以網頁的docid作為輸入資料 的key, 網頁中出現的單詞集合是輸入資料的 value; map 操作將輸入資料轉化為 (word,docid)的形式,即某個單詞作為key, docid作為中間資料的value,其含義是單詞 word在docid這個網頁出現過;reduce操作將中間資料中相同key的記錄融合,得到某 個單詞對應的網頁id列表: 。這就是單詞word對應的倒排列表。通過 這種方式就可以建立簡單的倒排索引,在reduce階段也可以做些複雜操作,獲得形式更為複雜的倒排索引。

圖6

更新策略有四種:完全重建、再合併策略、原地更新策略以及混合策略。

完全重建策略:當新增文件到達一定數量,將新增文件和原先的老文件整合,然後利用靜態索引建立方法對所有文件重建索引,新索引建立完成後老索引會被遺棄。此法代價高,但是目前主流商業搜尋引擎一般是採用此方式來維護索引的更新(這句話是書中原話)

再合併策略:當新增文件進入系統,解析文件,之後更新記憶體中維護的臨時索引,文件中出現的每個單詞,在其倒排表列表末尾追加倒排表列表項;一旦臨時索引將指定記憶體消耗光,即進行一次索引合併,這裡需要倒排檔案裡的倒排列表存放順序已經按照索引單詞字典順序由低到高排序,這樣直接順序掃瞄合併即可。其缺點是:因為要生成新的倒排索引檔案,所以對老索引中的很多單詞,儘管其在倒排列表並未發生任何變化,也需要將其從老索引中取出來並寫入新索引中,這樣對磁碟消耗是沒必要的。

原地更新策略:試圖改進再合併策略,在原地合併倒排表,這需要提前分配一定的空間給未來插入,如果提前分配的空間不夠了需要遷移。實際顯示,其索引更新的效率比再合併策略要低。

混合策略:出發點是能夠結合不同索引更新策略的長處,將不同索引更新策略混合,以形成更高效的方法。

《這就是搜尋引擎:核心技術詳解》

《搜尋引擎—資訊檢索實踐》

倒排索引 搜尋引擎的基石

在關係資料庫系統裡,索引是檢索資料最有效率的方式,但對於搜尋引起,他它並不能滿足其特殊要求 2 資料操作簡單 搜尋引擎使用的資料操作簡單 一般而言 只需要增 刪 改 查幾個功能 而且資料都有特定的格式 可以針對這些應用設計出簡單高效的應用程式。而一般的資料庫系統則支援大而全的功能 同時損失了速度和空...

搜尋引擎 倒排索引

本節通過引入簡單例項,介紹與搜尋引擎索引有關的一些基礎概念,了解這些基礎概念對於後續深入了解索引的工作機制非常重要。3.1.1單詞 文件矩陣 單詞 文件矩陣是表達兩者之間所具有的一種包含關係的概念模型,圖3 1展示了其含義。圖3 1的每列代表乙個文件,每行代表乙個單詞,打對勾的位置代表包含關係。圖3...

搜尋引擎 倒排索引

倒排索引基本概念示意圖 假設文件集合包含五個文件,每個文件內容如圖3 3所示,在圖中最左端一欄是每個文件對應的文件編號。我們的任務就是對這個文件集合建立倒排索引。文件集合 需要對每個單詞賦予唯一的單詞編號,同時記錄哪些文當包含這些單詞,如下就是乙個簡單的索引,單詞id記錄了每個單詞的單詞編號,第二欄...