什麼是倒排檔案
在搜尋引擎收集完數據的預處理階段,搜尋引擎往往需要一種高效的數據結構來對外提供檢索服務。而現行最有效的數據結構就是“倒排檔案”。倒排檔案簡單一點可以定義為“用文檔的關鍵字作為索引,文檔作為索引目標的一種結構(類似於普通書籍中,索引是關鍵字,書的頁面是索引目標)。倒排檔案套用舉例
基於屬性的倒排
在一個帶結構的記錄檔案中,如資料庫檔案等。檔案里存放的都是一條接著一條的整齊的記錄,每個記錄又可分為一個個的屬性。檢索過程往往要求找出,在某個或者某些屬性上滿足一定條件的記錄集合。像這一類的檢索我們稱為基於屬性的檢索。比如北大里某次活動的學生報名登記表檔案,部分信息如下:
001 xxx142 張三 男 18 元培
002 xxx205 李四 女 17 哲學
003 xxx187 王五 男 19 生物
004 xxx325 趙六 女 18 元培
而我們利用倒排檔案來實現上述非關鍵碼的查詢,就能大大提高速度。對於前面的情況設計倒排表如下:
男 001,003
女 002,004
16
17 002
18 001,004
19 003
20
元培 001,004
生物 003
哲學 002
由此可見,有了倒排檔案,我們就可以將查詢變成幾個集合之間的交,並等運算,得到的最後結果即時我們要求的,這樣不用挨個讀取記錄,且參與運算的數據大大減少,基本可以不用多次讀寫磁碟而直接在記憶體里進行運算,大大提高了檢索速度。 有了這樣的倒排表後,前面的查詢就很容易了。如找出院係為“元培”的所有學生(簡單查詢),可以在院系倒排表中,取出屬性值為“元培”的那一行倒排表,它裡面包含的所有編號對應的記錄就是所求的記錄。又如找出年齡在18到20之間的所有學生(範圍查詢),我們可以把年齡倒排表中18,19和20這三行所對應的三個編號集合做並運算,最後結果就是我們要找的。而找出年齡在19歲以上的所有男生(邏輯查詢),這個我們找出19歲以上的所有編號集合,用並運算合在一起,再同性別倒排表中的男生那一行的集合做與運算,最後就能得到正確結果。
基於文本的倒排
倒排檔案也可以套用於非結構化的信息檢索裡面,如大量正文的文本索引。尤其當今搜尋引擎需要對海量的正文文本信息進行檢索的情況下,倒排檔案的使用尤其重要。對多個正文文本建立索引的基本思想就是,把正文看成一個一個的關鍵字的集合,然後用這些詞組成一些適合快速檢索的數據結構。一個倒排檔案就是一個已經排好序的關鍵字的列表,其中每個關鍵字指向一個倒排表,該表中記錄了該關鍵字出現的文檔集合以及在該文檔中的出現位置。如北大某院圖書館論文集的部分倒排表:
關鍵字
倒排表(所在文檔編號,出現次數, 出現位置)
KMP
(#3307, 2, 5, 43)(#4615, 5, 0, 19, 34, 70, 143)
最小支撐樹
(#2519, 1, 267)(#6742, 3, 19, 322, 526)……
貪心算法
(#2948, 3, 45, 267, 587)(#3693, 5, 39, 423, 765,809,1024)……
……
……