日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

这就是搜索引擎--读书笔记五--索引的建立与更新

發(fā)布時(shí)間:2023/12/20 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 这就是搜索引擎--读书笔记五--索引的建立与更新 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

索引的建立和更新

索引的建立

前一總結(jié)里說到,如果索引結(jié)構(gòu)建立好了,可以提高搜索的速度,那么給定一個(gè)文檔集合,索引是如何建立起來的呢?建立索引的方式有很多種,在這里我就書中提到的三種方法簡(jiǎn)單總結(jié)一下。

兩遍文檔遍歷法

  • 第一次文檔遍歷

第一次掃描文檔集合時(shí),并沒有立即開始建立索引,而是收集一些的統(tǒng)計(jì)信息,比如文檔集合包含的文檔個(gè)數(shù)N、文檔集合內(nèi)包含的不同單詞個(gè)數(shù)M以及每個(gè)單詞在哪些文檔中出現(xiàn)過的信息DF等等。將所有單詞對(duì)應(yīng)的DF值全部相加,就可以知道建立最終的索引需要多少內(nèi)存了,然后在內(nèi)存中將連續(xù)存儲(chǔ)區(qū)劃分成不同大小的片段,詞典內(nèi)某個(gè)單詞根據(jù)自己對(duì)應(yīng)的DF信息,可以通過指針指向?qū)儆谧约旱膬?nèi)存片段的起始位置和終止位置 , 這樣在第二遍掃描中,這個(gè)單詞對(duì)應(yīng)的倒排列表信息會(huì)被填充進(jìn)這個(gè)片段中。

  • 第二次文檔遍歷

這一次掃描的時(shí)候,就開始真正建立每個(gè)單詞的倒排列表信息了,即對(duì)每個(gè)單詞來說,獲得包含這個(gè)單詞的每個(gè)文檔的文檔ID,以及這個(gè)單詞在文檔中出現(xiàn)的次數(shù),這樣就可以不斷填充第一次遍歷掃描所分配的內(nèi)存空間。當(dāng)然,如果要記錄單詞在文檔中出現(xiàn)的位置也是可以的,第一次掃描中分配內(nèi)存時(shí)加上這個(gè)位置信息就可以了。

值得注意的是:此方法完全是在內(nèi)存里完成索引的創(chuàng)建過程的,而后面兩種方法則是通過內(nèi)存和磁盤相互配合來完成索引建立任務(wù)的。而正因?yàn)閯?chuàng)建索引是在內(nèi)存中完成的,所以就要求內(nèi)存一定要足夠大,否則文檔集合太大的話,內(nèi)存不能夠滿足需求。而對(duì)文檔集合進(jìn)行兩遍掃描,所以從速度上相比后面兩種方法不占優(yōu)勢(shì)。

排序法

排序法在建立索引的過程中,始終在內(nèi)存中分配固定大小的空間用來存放詞典信息和索引的中間結(jié)果,當(dāng)分配的空間被消耗光的時(shí)候,把中間結(jié)果寫入磁盤,清空內(nèi)存里中間結(jié)果所占的空間,以用作下一輪存放索引中間結(jié)果的存儲(chǔ)區(qū)。這種情況下,可以把內(nèi)存看做驛站,它只是一個(gè)中間轉(zhuǎn)折點(diǎn)。這種方法分為兩個(gè)步驟:中間結(jié)果內(nèi)存排序和合并中間結(jié)果。

為什么要進(jìn)行排序呢主要是為了方便后續(xù)的處理。因?yàn)樵谛纬芍虚g結(jié)果文件前,已經(jīng)按照單詞ID和文檔ID進(jìn)行了排序,所以進(jìn)入內(nèi)存緩沖區(qū)的數(shù)據(jù)都是已經(jīng)排好序的,合并過程中,將不同緩沖區(qū)中包含同一個(gè)單詞ID的信息進(jìn)行合并,如果某個(gè)單詞ID的所有信息全部合并完成,那么說明這個(gè)單詞的倒排列表已經(jīng)構(gòu)建完成了,將其寫入最終索引中,同時(shí)將各個(gè)緩沖區(qū)中對(duì)應(yīng)這個(gè)單詞ID信息清空。就這樣一直往下進(jìn)行,直到所有的單詞ID對(duì)應(yīng)的倒排列表都已經(jīng)創(chuàng)建完成。最后的結(jié)果,就是最終的索引文件。

歸并法

由于排序法有一個(gè)不足之處,那就是在將中間結(jié)果寫入磁盤的時(shí)候,詞典信息一直在內(nèi)存中進(jìn)行維護(hù),這樣也會(huì)占據(jù)一部分的內(nèi)存。歸并法就是對(duì)排序法做出了改進(jìn),即每次將內(nèi)存中數(shù)據(jù)寫入磁盤時(shí),包括詞典在內(nèi)的所有中間結(jié)果信息都被寫入磁盤,這樣內(nèi)存所有內(nèi)容都可以被清空。

歸并法整體流程也是分為兩個(gè)大的階段,首先在內(nèi)存里維護(hù)中間結(jié)果,當(dāng)內(nèi)存占滿時(shí),將內(nèi)存數(shù)據(jù)寫入磁盤臨時(shí)文件,第二階段對(duì)臨時(shí)文件進(jìn)行歸并形成最終索引。

歸并法和排序法的區(qū)別

首先,排序法在內(nèi)存中存放的是詞典信息和三元組數(shù)據(jù)(單詞ID,文檔ID,單詞頻率),在建立索引的過程中,詞典和三元組數(shù)據(jù)并沒有直接的聯(lián)系,詞典只是為了將單詞映射為單詞ID。而歸并法則是在內(nèi)存中建立一個(gè)完整的內(nèi)存索引結(jié)構(gòu),相當(dāng)于對(duì)目前處理的文檔子集建立起了一個(gè)倒排索引。

其次,在將中間結(jié)果寫入磁盤臨時(shí)文件時(shí),歸并法將整個(gè)內(nèi)存的倒排索引寫入臨時(shí)文件,對(duì)于某個(gè)單詞的倒排列表在寫入磁盤文件時(shí),將詞典項(xiàng)放在列表最前端,之后跟隨相應(yīng)的倒排列表,這樣依次將單詞和對(duì)應(yīng)的倒排列表寫入磁盤文件,隨后徹底清空所占內(nèi)存。而排序法只是將三元組數(shù)據(jù)排序后寫入磁盤文件,詞典作為一個(gè)映射表一直存儲(chǔ)在內(nèi)存中。

在最后合并為最終索引的過程中,排序法是根據(jù)同一單詞ID的這樣三元組依次進(jìn)行合并,歸并法的臨時(shí)文件則是每個(gè)單詞對(duì)應(yīng)的部分倒排列表,所以在合并時(shí)針對(duì)每個(gè)單詞的倒排列表進(jìn)行合并,形成這個(gè)單詞的最終倒排列表就可以了,與此同時(shí),最后的合并過程中也會(huì)形成最終的詞典信息。如果大家對(duì)算法里的歸并排序有所了解的話,就很清楚這種方法了吧。

?

索引更新策略

常用的索引更新策略有4種:完全重建策略、再合并策略、原地更新策略以及混合策略。

完全重建策略:很直觀的方法,當(dāng)新增文檔達(dá)到一個(gè)數(shù)量時(shí),將新增文檔和原先的老文檔進(jìn)行合并,然后利用上文提到的建立索引的方式,對(duì)所有文檔重新建立索引。

再合并策略:有新增文檔進(jìn)入搜索系統(tǒng)時(shí),搜索系統(tǒng)在內(nèi)存維護(hù)臨時(shí)倒排索引來記錄信息,當(dāng)新增文檔達(dá)到一定數(shù)量的時(shí)候,則把臨時(shí)索引文件和老文檔的倒排索引文件進(jìn)行合并,以生成新的索引。

原地更新策略:在索引合并時(shí),并不生成新的索引文件,而是直接在原先的索引文件里進(jìn)行追加操作,將增量索引里單詞的倒排列表項(xiàng)追加到老索引對(duì)應(yīng)的倒排列表項(xiàng)的末尾,這樣的話,就只更新增量索引里出現(xiàn)的單詞相關(guān)信息,其他單詞信息不做變動(dòng)。

混合策略:結(jié)合不同索引更新策略的優(yōu)勢(shì),將不同的索引更新策略混合以形成更高效的方法。

混合策略一般會(huì)將單詞根據(jù)其不同性質(zhì)進(jìn)行分類,不同類別的單詞,對(duì)其索引采取不同的索引更新策略。常見的做法是:根據(jù)單詞的倒排列表長(zhǎng)度進(jìn)行劃分,因?yàn)橛行﹩卧~經(jīng)常在不同文檔中出現(xiàn),所以其對(duì)應(yīng)的倒排列表就較長(zhǎng),而有些單詞很少見,其倒排列表就較短。那么長(zhǎng)倒排列表單詞采取原地更新策略,因?yàn)檫@種策略能夠節(jié)省磁盤讀寫次數(shù);而短倒排列表就采取再和并策略。通過這種根據(jù)實(shí)際情況來分別采取實(shí)際策略的方法,效果體現(xiàn)的比較顯著,磁盤的讀寫操作和各種策略的優(yōu)勢(shì)都充分體現(xiàn)出來了。

轉(zhuǎn)載于:https://www.cnblogs.com/BaiYiShaoNian/p/4548817.html

總結(jié)

以上是生活随笔為你收集整理的这就是搜索引擎--读书笔记五--索引的建立与更新的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。