索引
首先我們先介紹下索引(Index)盗棵。索引本質(zhì)上是一種記錄信息的信息,它本身占較小的體積北发,但記錄了關(guān)鍵字在整個系統(tǒng)中出現(xiàn)的位置纹因。日常生活中,我們也有很多使用索引的例子琳拨,比如一本圖書瞭恰,它的目錄就是一個索引文件,每條索引記錄了章節(jié)所在頁碼狱庇,能使讀者快速翻閱至所需章節(jié)惊畏。網(wǎng)頁被抓取并經(jīng)過分析系統(tǒng)分析后,索引系統(tǒng)便會給網(wǎng)頁一個唯一的ID密任,并將網(wǎng)頁ID和位置記錄在索引文件中颜启。
需要注意的是,由于網(wǎng)頁是海量的浪讳,為了存儲和計算考慮缰盏,網(wǎng)頁ID會盡可能的短,并且最好是長整數(shù)而不是字符串淹遵。因為字符串在排序口猜、查找時的性能遠(yuǎn)遠(yuǎn)不如整數(shù),并且字符串字節(jié)數(shù)多透揣,造成存儲和內(nèi)存壓力加大济炎。通常情況下會把URL映射成64位或128位的二進(jìn)制數(shù)。
正排索引
正排索引是從網(wǎng)頁到關(guān)鍵字的映射辐真,一般含有網(wǎng)頁ID须尚、關(guān)鍵字(或關(guān)鍵字ID)崖堤、關(guān)鍵字出現(xiàn)次數(shù)、關(guān)鍵字出現(xiàn)位置等幾個重要參數(shù)恨闪。例如給定兩篇文檔“中國人民愛中國”和“中國歷史悠久”倘感,經(jīng)分詞后創(chuàng)建的一個典型的正排索引如下所示:
其中,Hits代表了關(guān)鍵字在文檔中出現(xiàn)次數(shù)咙咽,List代表了關(guān)鍵字出現(xiàn)在文檔中的位置老玛。
因此正排索引是通過網(wǎng)頁來尋找關(guān)鍵字,可以知道一個網(wǎng)頁中是否包含了某個關(guān)鍵字钧敞、關(guān)鍵字出現(xiàn)了幾次以及關(guān)鍵字出現(xiàn)的位置蜡豹。但是網(wǎng)頁檢索是通過關(guān)鍵字來找文檔,因此需要把正排索引轉(zhuǎn)換為倒排索引溉苛,才能滿足實際的需求镜廉。
倒排索引
倒排索引是從關(guān)鍵字到文檔的映射,可以分為兩個部分愚战。
第一部分為索引文件娇唯,記錄了關(guān)鍵字(或關(guān)鍵字ID)、出現(xiàn)在多少文檔中以及這些文檔在文檔庫中的偏移量寂玲。
第二部分為文檔文件塔插,記錄了文檔ID、關(guān)鍵字出現(xiàn)次數(shù)以及關(guān)鍵字在文檔中出現(xiàn)的位置拓哟。
例如:詞“中國”在兩篇文檔中均出現(xiàn)想许,則nDocs=2,Offset分別為兩篇文檔的偏移地址断序。根據(jù)兩個地址分別找到DocID為000001和000002的文檔流纹。“中國”在第一篇文檔中出現(xiàn)了2次违诗,偏移量分別為0,3漱凝,在第二篇文檔中出現(xiàn)了1次,偏移量為0诸迟。
這樣輸入任意一個關(guān)鍵字茸炒,通過搜索索引文件,就能找到對應(yīng)的文檔地址亮蒋,再根據(jù)文檔地址在文檔文件中查找扣典,就能找到相關(guān)文檔并能顯示關(guān)鍵字在各文檔中的位置妆毕。