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

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