搜尋引擎怎樣建立索引?

時間 2021-06-02 14:00:56

1樓:大灰狼

索引在搜尋引擎中泛指用於檢索的資料庫檔案總稱。每一次檢索資料均為訪問和讀取索引檔案,每一次更新資料則是對索引檔案的修改。

主要的三種建立索引的方法。

此方法在記憶體裡完成索引的建立過程。要求記憶體要足夠大。

第一遍

收集一些全域性的統計資訊。包括文件集合包含的文件個數N,文件集合內所包含的不同單詞個數M,每個單詞在多少個文件中出現過的資訊DF。

將所有單詞對應的DF值全部相加,就可以知道建立最終索引所需的記憶體大小是多少。

獲取資訊後,根據統計資訊分配記憶體等資源,同事建立好單詞相對應倒排列表在記憶體中的位置資訊。

第二遍

逐個單詞建立倒排列表資訊。獲得包含某個單詞的每個文件的文件ID,以及這個單詞在文件中的出現次數TF,然後不斷填充第一遍掃瞄時所分配的記憶體。當第二遍掃瞄結束的時候,分配的記憶體正好被填充滿,每個單詞用指標所指向的記憶體區域「片段」,其起始位置和終止位置之間的資料就是這個單詞對應的倒排列表。

在建立索引過程中,始終在記憶體中分配固定大小的空間,用來存放詞典資訊和索引的中間結果,當分配的空間被消耗光的時候,把中間結果寫入磁碟,清空記憶體裡中間結果所佔空間,以用做下一輪存放索引中間結果的儲存區。參考下圖:

上圖是排序法建立索引中間結果的示意圖。建立過程:

讀入文件後,對文件進行編號,賦予唯一的文件ID,並對文件內容解析;

將單詞對映為單詞ID;

建立(單詞ID、文件ID、單詞頻率)三元組;

將三元組追加進中間結果儲存區末尾;

然後依次序處理下乙個文件;

當分配的記憶體定額被佔滿時,則對中間結果進行排序(根據單詞ID->文件ID的排序原則);

將排好序的三元組寫入磁碟檔案中。

注:在排序法建立索引的過程中,詞典是一直儲存在記憶體中的,由於分配記憶體是固定大小,漸漸地詞典占用記憶體越來越大,那麼,越往後,可用來儲存三元組的空間越來越少。

建立好索引後,需要合併。

合併時,系統為每個中間結果檔案在記憶體中開闢乙個資料緩衝區,用來存放檔案的部分資料。將不同緩衝區中包含的同乙個單詞ID的三元組進行合併,如果某個單詞ID的所有三元組全部合併完成,說明這個單詞的倒排列表已經構建完成,則將其寫入最終索引中,同事將各個緩衝區中對應這個單詞ID的三元組內容清空。緩衝區繼續從中間結果檔案讀取後續的三元組進行下一輪合併。

當所有中間結果檔案都依次被讀入緩衝區,並合併完成後,形成最終的索引檔案。

歸併法與排序法類似,不同的是,每次將記憶體中資料寫入磁碟時,包括詞典在內的所有中間結果都被寫入磁碟,這樣記憶體所有內容都可以被清空,後續建立索引可以使用全部的定額記憶體。歸併法的示意圖如下所示:

與排序法的差異:

1、排序法在記憶體中存放的是詞典資訊和三元組資料,詞典和三元組資料並沒有直接的聯絡,詞典只是為了將單詞對映為單詞ID。歸併法則是在記憶體中建立乙個完整的記憶體索引結構,是最終文章索引的一部分。

2、在將中間結果寫入磁碟臨時檔案時,歸併法將這個記憶體的倒排索引寫入臨時檔案,隨後徹底清空所佔記憶體。而排序法只是將三元組資料排序後寫入磁碟臨時檔案,詞典作為乙個對映表一直儲存在記憶體中。

3、合併時,排序法是對同一單詞的三元組依次進行合併;歸併法的臨時檔案則是每個單詞對應的部分倒排列表,所以在合併時針對每個單詞的倒排列表進行合併,形成這個單詞的最終倒排列表。

搜尋引擎索引資料結構和演算法 - HackerVirus - 部落格園

知名學術搜尋引擎有哪些?

計算機領域 dblp Proquest Computer Science Google scholar ACM 的資料庫 待更 學術搜尋的話我主要是用Google學術 別問我怎麼上去 https www.iproxier.com promote zhihu 只能幫你到這裡了 陳童 補充一下楊逍,生物...

程式設計師該如何使用搜尋引擎?

忘川觀鶴飲 高薪的IT作業是很多年輕人的作業願望,但是,一旦身入其間卻發覺沒有想像中那麼誇姣。被稱為IT藍領的程式設計員,作業強度大,像個編碼 機器 技能更新換代快,飯碗不穩定。跟著年齡的增加,IT程式設計員該何去何從。做IT的搞不好就被挨踢。你提這個問題就了解你是才搞程式沒多久。等你真正進入這個作...

在搜尋引擎時代,知識還是力量麼?

茗姐說 知識不是力量,思考力才是。資訊氾濫成災,如果不經過提煉就很難形成價值。單一的知識是無法發揮效用的,我們要學會把它與過去積累的知識連線,用最簡短的語言陳述清楚,運用嫻熟,實踐方能出真知。光學不練,很難成大師。 知識只有被人使用並對人產生出新的效益時才會是力量。知識本身並不等於力量,而搜尋引擎往...