搜尋引擎索引之索引基礎

2021-06-03 20:10:01 字數 2612 閱讀 9015

本文節選自《這就是搜尋引擎:核心技術詳解》第三章

本節通過引入簡單例項,介紹與搜尋引擎索引有關的一些基礎概念,了解這些基礎概念對於後續深入了解索引的工作機制非常重要。

3.1.1單詞—文件矩陣

單詞-文件矩陣是表達兩者之間所具有的一種包含關係的概念模型,圖3-1展示了其含義。圖3-1的每列代表乙個文件,每行代表乙個單詞,打對勾的位置代表包含關係。

圖3-1 單詞-文件矩陣

從縱向即文件這個維度來看,每列代表文件包含了哪些單詞,比如文件1包含了詞彙1和詞彙4,而不包含其它單詞。從橫向即單詞這個維度來看,每行代表了哪些文件包含了某個單詞。比如對於詞彙1來說,文件1和文件4中出現過單詞1,而其它文件不包含詞彙1。矩陣中其它的行列也可作此種解讀。

搜尋引擎的索引其實就是實現「單詞-文件矩陣」的具體資料結構。可以有不同的方式來實現上述概念模型,比如「倒排索引」、「簽名檔案」、「字尾樹」等方式。但是各項實驗資料表明,「倒排索引」是實現單詞到文件對映關係的最佳實現方式,所以本章主要介紹「倒排索引」的技術細節。

3.1.2倒排索引基本概念

在本小節,我們會解釋在倒排索引中常用到的一些專用術語,為了表達的便捷性,在本書後續章節內會直接使用這些術語。

文件集合(document collection):由若干文件構成的集合稱之為文件集合。比如海量的網際網路網頁或者說大量的電子郵件都是文件集合的具體例子。

文件編號(document id):在搜尋引擎內部,會將文件集合內每個文件賦予乙個唯一的內部編號,以此編號來作為這個文件的唯一標識,這樣方便內部處理,每個文件的內部編號即稱之為「文件編號」,後文有時會用docid來便捷地代表文件編號。

單詞編號(word id):與文件編號類似,搜尋引擎內部以唯一的編號來表徵某個單詞,單詞編號可以作為某個單詞的唯一表徵。

倒排索引(inverted index):倒排索引是實現「單詞-文件矩陣」的一種具體儲存形式,通過倒排索引,可以根據單詞快速獲取包含這個單詞的文件列表。倒排索引主要由兩個部分組成:「單詞詞典」和「倒排檔案」。

單詞詞典(lexicon):搜尋引擎的通常索引單位是單詞,單詞詞典是由文件集合中出現過的所有單詞構成的字串集合,單詞詞典內每條索引項記載單詞本身的一些資訊以及指向「倒排列表」的指標。

倒排列表(postinglist):倒排列表記載了出現過某個單詞的所有文件的文件列表及單詞在該文件中出現的位置資訊,每條記錄稱為乙個倒排項(posting)。根據倒排列表,即可獲知哪些文件包含某個單詞。

倒排檔案(inverted file):所有單詞的倒排列表往往順序地儲存在磁碟的某個檔案裡,這個檔案即被稱之為倒排檔案,倒排檔案是儲存倒排索引的物理檔案。

關於這些概念之間的關係,通過圖3-2可以比較清晰的看出來。

圖3-2 倒排索引基本概念示意圖

3.1.3倒排索引簡單例項

倒排索引從邏輯結構和基本思路上來講非常簡單。下面我們通過具體例項來進行說明,使得讀者能夠對倒排索引有乙個巨集觀而直接的感受。

假設文件集合包含五個文件,每個文件內容如圖3-3所示,在圖中最左端一欄是每個文件對應的文件編號。我們的任務就是對這個文件集合建立倒排索引。

圖3-3 文件集合

中文和英文等語言不同,單詞之間沒有明確分隔符號,所以首先要用分詞系統將文件自動切分成單詞序列。這樣每個文件就轉換為由單詞序列構成的資料流,為了系統後續處理方便,需要對每個不同的單詞賦予唯一的單詞編號,同時記錄下哪些文件包含這個單詞,在如此處理結束後,我們可以得到最簡單的倒排索引(參考圖3-4)。在圖3-4中,「單詞id」一欄記錄了每個單詞的單詞編號,第二欄是對應的單詞,第三欄即每個單詞對應的倒排列表。比如單詞「谷歌」,其單詞編號為1,倒排列表為,說明文件集合中每個文件都包含了這個單詞。

圖3-4 簡單的倒排索引

圖3-5 帶有單詞頻率資訊的倒排索引

實用的倒排索引還可以記載更多的資訊,圖3-6所示索引系統除了記錄文件編號和單詞頻率資訊外,額外記載了兩類資訊,即每個單詞對應的「文件頻率資訊」(對應圖3-6的第三欄)以及在倒排列表中記錄單詞在某個文件出現的位置資訊。

「文件頻率資訊」代表了在文件集合中有多少個文件包含某個單詞,之所以要記錄這個資訊,其原因與單詞頻率資訊一樣,這個資訊在搜尋結果排序計算中是非常重要的乙個因子。而單詞在某個文件中出現的位置資訊並非索引系統一定要記錄的,在實際的索引系統裡可以包含,也可以選擇不包含這個資訊,之所以如此,因為這個資訊對於搜尋系統來說並非必需的,位置資訊只有在支援「短語查詢」的時候才能夠派上用場。

以單詞「拉斯」為例,其單詞編號為8,文件頻率為2,代表整個文件集合中有兩個文件包含這個單詞,對應的倒排列表為:,其含義為在文件3和文件5出現過這個單詞,單詞頻率都為1,單詞「拉斯」在兩個文件中的出現位置都是4,即文件中第四個單詞是「拉斯」。

圖3-6所示倒排索引已經是乙個非常完備的索引系統,實際搜尋系統的索引結構基本如此,區別無非是採取哪些具體的資料結構來實現上述邏輯結構。

有了這個索引系統,搜尋引擎可以很方便地響應使用者的查詢,比如使用者輸入查詢詞「facebook」,搜尋系統查詢倒排索引,從中可以讀出包含這個單詞的文件,這些文件就是提供給使用者的搜尋結果,而利用單詞頻率資訊、文件頻率資訊即可以對這些候選搜尋結果進行排序,計算文件和查詢的相似性,按照相似性得分由高到低排序輸出,此即為搜尋系統的部分內部流程,具體實現方案本書第五章會做詳細描述。

搜尋引擎索引之索引基礎

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

搜尋引擎 索引

正排索引 文件編號,單詞編號,單詞的數量,單詞出現的位置。倒排索引 1,單詞詞典,儲存單詞以及統計資訊,單詞在記錄表中的便宜,可常駐記憶體,用雜湊表儲存。2,記錄表,單詞對應的文件集合,記錄單詞出現的數目 位置。文件採用差分變長編碼。其中文件可按編號公升序排列 可利用差分編碼 也可按出現次數排列,可...

搜尋引擎索引之如何建立索引

本文節選自 這就是搜尋引擎 核心技術詳解 第三章 3.4建立索引 正如前述章節所述,索引結構如果建立好了,可以增加搜尋的速度,那麼給定乙個文件集合,索引是如何建立起來的呢?建立索引的方式有很多種,本節敘述比較實用的三種建立索引的方法。3.4.1兩遍文件遍曆法 2 pass in memory inv...