測試資料來自ClueWeb09B資料集,其樣本儲存在目錄./test_data
中用於測試目的。當開始建立索引時,程式讀入壓縮的前向索引,將其解壓縮並產生位置發布。職位過帳被計數以產生非職位過帳。
職位過帳和非職位過帳分別儲存在兩個STL向量中。當向量達到一定大小(例如 500)時,兩個向量都會被壓縮並清空。在磁碟上的disk_index
目錄下建立兩個檔案來儲存壓縮的二進位陣列。重複此過程,直到剩下的帖子少於 500 個。剩餘的帖子作為動態索引存儲在內存中。
到目前為止,僅實作了一種形式的編碼方法。當 method 等於 1 時,使用可變位元組編碼來壓縮發布。我的索引中使用的可變位元組規則如下:
每個文件的名稱包含兩個部分:前綴和數字。位置索引儲存在檔案“Z0”、“Z1”、...“Zn”、“I0”、“I1”、...“In”中。壓縮後,索引器檢查磁碟上是否存在“Z0”。如果「Z0」不退出,則建立「Z0」並將索引寫入「Z0」。如果「Z0」存在,則索引將寫入「I0」。對於非位置索引,如果不存在,則檢查“X0”並寫入。否則,非位置索引將寫入“L0”。術語ID儲存在對應文件的文件元資料中。術語的元資料儲存檔案名稱以及開始和結束位置。
具有相同索引號的兩個檔案永遠不能在磁碟上永久共存。每當 500 個記錄寫入磁碟後,索引器就會檢查是否有兩個檔案具有相同的索引號。如果存在,則將兩個文件合併為一個新文件,並將索引號加1。例如,如果“Z0”和“I0”都存在,則將它們組合並寫入“Z1”,如果磁碟上已存在“Z1”,則將它們組合並寫入“I1”。重複此過程,直到磁碟上沒有“I”檔案為止。元資料會隨之更新。
接收新的貼文並將其儲存在動態索引中。由憑證分析器產生的過帳稱為外部過帳,而要儲存在記憶體中的過帳稱為內部過帳。當記憶體中有 500 個貼文時,它會使用與建立索引相同的方法進行壓縮。
indexer.cpp
中的兩個錯誤,並且可以在同一個檔案中優化兩個函數./initialize.sh
建立儲存磁碟索引的目錄並確保目錄為空make
呼叫 makefile ./INDEX
開始建立索引