最近在做一個(gè)關(guān)于搜索引擎方面的項(xiàng)目,于是乎研究了一點(diǎn)關(guān)于搜索引擎方面的東西。我們的目標(biāo)是做一個(gè)輕量級的搜索引擎,相對真正的商業(yè)搜索引擎來說還是較為簡單的。
對于搜索引擎這樣的項(xiàng)目來說,我覺得重點(diǎn)在于質(zhì)量要求,對于功能要求可能會(huì)弱一點(diǎn)。高并發(fā),高存儲(chǔ)量和快速查詢是一個(gè)搜索引擎的命脈,而在功能上重點(diǎn)要注意的是幾個(gè)算法的實(shí)現(xiàn)。以前做的項(xiàng)目大多數(shù)只是注重功能的實(shí)現(xiàn),對于性能的要求很低,而這次的項(xiàng)目則要求我們對這方面有所注重,也是一次很好的學(xué)習(xí)過程。
從該項(xiàng)目的需求出發(fā),將項(xiàng)目分為 4 個(gè)模塊,分別為抓取模塊,分析模塊,搜索模塊和用戶接口模塊。對于每個(gè)模塊的需求進(jìn)行的相應(yīng)的劃分。根據(jù)需求以及現(xiàn)實(shí)的硬件條件,初步設(shè)計(jì)出搜索引擎的體系結(jié)構(gòu),如下圖。
抓取模塊和分析模塊
首先是抓取模塊和分析模塊,對于互聯(lián)網(wǎng)進(jìn)行定期的網(wǎng)頁爬取,并進(jìn)行分析。將爬取和分析的數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫。對于數(shù)據(jù)庫,主要分為 4 個(gè)部分,存儲(chǔ)鏈接結(jié)構(gòu)的鏈接表,存儲(chǔ)網(wǎng)頁內(nèi)容的內(nèi)容表,建立關(guān)鍵詞倒排索引的索引表和用于競價(jià)排名的競價(jià)表。
在爬取和分析數(shù)據(jù)的時(shí)候需要在鏈接表中預(yù)儲(chǔ)存一部分網(wǎng)頁鏈接,根據(jù)已有的網(wǎng)頁鏈接進(jìn)行網(wǎng)頁爬取,并且將新的鏈接存儲(chǔ)的數(shù)據(jù)庫中,采用類似隊(duì)列的方式對于網(wǎng)頁爬取鏈接進(jìn)行處理。對于鏈接表中數(shù)據(jù)的設(shè)計(jì)要考慮到后期根據(jù)反向鏈接的數(shù)量進(jìn)行搜索結(jié)果排序。將爬取和分析后的頁面存儲(chǔ)到內(nèi)容表中,并且,分析模塊分析網(wǎng)頁建立詞項(xiàng)的倒排索引存儲(chǔ)到索引表中。
在質(zhì)量要求方面要求對數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行加密處理以及多個(gè)服務(wù)器之間的數(shù)據(jù)同步。我們的設(shè)計(jì)是多個(gè)服務(wù)器上的數(shù)據(jù)庫進(jìn)行完全冗余存儲(chǔ),及多個(gè)數(shù)據(jù)庫中的數(shù)據(jù)同步。每個(gè)服務(wù)器進(jìn)行網(wǎng)頁的爬取和分析以后要將本服務(wù)器新增的數(shù)據(jù)發(fā)送給另外的服務(wù)器以保持?jǐn)?shù)據(jù)同步。
搜索模塊
搜索模塊的主要功能是根據(jù)用戶的請求進(jìn)行處理,返回給用戶搜索的結(jié)果。因?yàn)槎鄠€(gè)服務(wù)器之前的數(shù)據(jù)庫是冗余的,所以在搜索的時(shí)候只要對本服務(wù)器進(jìn)行搜索即可。
搜索模塊接受到用戶的請求,將用戶的請求進(jìn)行分詞處理和近義詞處理。然后通過對索引表和內(nèi)容表的查詢,搜索出結(jié)果集,并且根據(jù)鏈接表和競價(jià)表對結(jié)果集進(jìn)行加權(quán)和排序。將排序后的結(jié)果集返回給用戶。
在質(zhì)量要求方面要求大量用戶的并發(fā)執(zhí)行,要求多線程和良好的 Bean 容器。
用戶接口模塊
用戶接口模塊運(yùn)行在另外的一個(gè) web 服務(wù)器上,該 web 服務(wù)器呈現(xiàn)網(wǎng)頁并接受用戶的請求,首先對用戶的輸入進(jìn)行敏感詞分析,將分析過的請求發(fā)送到后臺服務(wù)器,并從后臺服務(wù)器獲得搜索結(jié)果,將結(jié)果顯示給用戶。
質(zhì)量上要求多用戶的并發(fā),主要體現(xiàn)在要求良好 web 容器和多線程,以及在發(fā)送請求到后臺服務(wù)器時(shí)的負(fù)載均衡。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
