搜索引擎索引之索引基础
????
??????????????????????????????????????????????????????????本文節選自《這就是搜索引擎:核心技術詳解》第三章
?????? 本節通過引入簡單實例,介紹與搜索引擎索引有關的一些基礎概念,了解這些基礎概念對于后續深入了解索引的工作機制非常重要。
?
3.1.1單詞—文檔矩陣
?????? 單詞-文檔矩陣是表達兩者之間所具有的一種包含關系的概念模型,圖3-1展示了其含義。圖3-1的每列代表一個文檔,每行代表一個單詞,打對勾的位置代表包含關系。
??????????????????????????
????????????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? 圖3-1 單詞-文檔矩陣
????? 從縱向即文檔這個維度來看,每列代表文檔包含了哪些單詞,比如文檔1包含了詞匯1和詞匯4,而不包含其它單詞。從橫向即單詞這個維度來看,每行代表了哪些文檔包含了某個單詞。比如對于詞匯1來說,文檔1和文檔4中出現過單詞1,而其它文檔不包含詞匯1。矩陣中其它的行列也可作此種解讀。
???? 搜索引擎的索引其實就是實現“單詞-文檔矩陣”的具體數據結構。可以有不同的方式來實現上述概念模型,比如“倒排索引”、“簽名文件”、“后綴樹”等方式。但是各項實驗數據表明,“倒排索引”是實現單詞到文檔映射關系的最佳實現方式,所以本章主要介紹“倒排索引”的技術細節。
?
3.1.2倒排索引基本概念
? ? ? 在本小節,我們會解釋在倒排索引中常用到的一些專用術語,為了表達的便捷性,在本書后續章節內會直接使用這些術語。
?
????? 文檔(Document):一般搜索引擎的處理對象是互聯網網頁,而文檔這個概念要更寬泛些,代表以文本形式存在的存儲對象,相比網頁來說,涵蓋更多種形式,比如Word,PDF,html,XML等不同格式的文件都可以稱之為文檔。再比如一封郵件,一條短信,一條微博也可以稱之為文檔。在本書后續內容,很多情況下會使用文檔來表征文本信息。
?
???? 文檔集合(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,倒排列表為{1,2,3,4,5},說明文檔集合中每個文檔都包含了這個單詞。
??????????????????????????????????????
????????????????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? 圖3-4 簡單的倒排索引
????? 之所以說圖3-4所示倒排索引是最簡單的,是因為這個索引系統只記載了哪些文檔包含某個單詞,而事實上,索引系統還可以記錄除此之外的更多信息。圖3-5是一個相對復雜些的倒排索引,與圖3-4的基本索引系統比,在單詞對應的倒排列表中不僅記錄了文檔編號,還記載了單詞頻率信息(TF),即這個單詞在某個文檔中的出現次數,之所以要記錄這個信息,是因為詞頻信息在搜索結果排序時,計算查詢和文檔相似度是很重要的一個計算因子,所以將其記錄在倒排列表中,以方便后續排序時進行分值計算。在圖3-5的例子里,單詞“創始人”的單詞編號為7,對應的倒排列表內容為:(3:1),其中的3代表文檔編號為3的文檔包含這個單詞,數字1代表詞頻信息,即這個單詞在3號文檔中只出現過1次,其它單詞對應的倒排列表所代表含義與此相同。
?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???
???????????????????????????????????????????? ? ? ? ? ? ? ? ? ?? 圖3-5 帶有單詞頻率信息的倒排索引
???? 實用的倒排索引還可以記載更多的信息,圖3-6所示索引系統除了記錄文檔編號和單詞頻率信息外,額外記載了兩類信息,即每個單詞對應的“文檔頻率信息”(對應圖3-6的第三欄)以及在倒排列表中記錄單詞在某個文檔出現的位置信息。
????? ???????????????????????????????????????????????????? ???????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖3-6 帶有單詞頻率、文檔頻率和出現位置信息的倒排索引
?
???? “文檔頻率信息”代表了在文檔集合中有多少個文檔包含某個單詞,之所以要記錄這個信息,其原因與單詞頻率信息一樣,這個信息在搜索結果排序計算中是非常重要的一個因子。而單詞在某個文檔中出現的位置信息并非索引系統一定要記錄的,在實際的索引系統里可以包含,也可以選擇不包含這個信息,之所以如此,因為這個信息對于搜索系統來說并非必需的,位置信息只有在支持“短語查詢”的時候才能夠派上用場。
???? 以單詞“拉斯”為例,其單詞編號為8,文檔頻率為2,代表整個文檔集合中有兩個文檔包含這個單詞,對應的倒排列表為:{(3;1;<4>),(5;1;<4>)},其含義為在文檔3和文檔5出現過這個單詞,單詞頻率都為1,單詞“拉斯”在兩個文檔中的出現位置都是4,即文檔中第四個單詞是“拉斯”。
???? 圖3-6所示倒排索引已經是一個非常完備的索引系統,實際搜索系統的索引結構基本如此,區別無非是采取哪些具體的數據結構來實現上述邏輯結構。
???? 有了這個索引系統,搜索引擎可以很方便地響應用戶的查詢,比如用戶輸入查詢詞“Facebook”,搜索系統查找倒排索引,從中可以讀出包含這個單詞的文檔,這些文檔就是提供給用戶的搜索結果,而利用單詞頻率信息、文檔頻率信息即可以對這些候選搜索結果進行排序,計算文檔和查詢的相似性,按照相似性得分由高到低排序輸出,此即為搜索系統的部分內部流程,具體實現方案本書第五章會做詳細描述。
總結
以上是生活随笔為你收集整理的搜索引擎索引之索引基础的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 搜索引擎链接算法之:HITS算法解析
- 下一篇: 搜索引擎索引之如何建立索引