搜索引擎體系結構設計

 

最近在做一個關於搜索引擎方面的項目,於是乎研究了一點關於搜索引擎方面的東西。我們的目標是做一個輕量級的搜索引擎,相對真正的商業搜索引擎來說還是較爲簡單的。

對於搜索引擎這樣的項目來說,我覺得重點在於質量要求,對於功能要求可能會弱一點。高併發,高存儲量和快速查詢是一個搜索引擎的命脈,而在功能上重點要注意的是幾個算法的實現。以前做的項目大多數只是注重功能的實現,對於性能的要求很低,而這次的項目則要求我們對這方面有所注重,也是一次很好的學習過程。

從該項目的需求出發,將項目分爲4個模塊,分別爲抓取模塊,分析模塊,搜索模塊和用戶接口模塊。對於每個模塊的需求進行的相應的劃分。根據需求以及現實的硬件條件,初步設計出搜索引擎的體系結構,如下圖。

抓取模塊和分析模塊

首先是抓取模塊和分析模塊,對於互聯網進行定期的網頁爬取,並進行分析。將爬取和分析的數據存儲到數據庫。對於數據庫,主要分爲4個部分,存儲鏈接結構的鏈接表,存儲網頁內容的內容表,建立關鍵詞倒排索引的索引表和用於競價排名的競價表。

在爬取和分析數據的時候需要在鏈接表中預儲存一部分網頁鏈接,根據已有的網頁鏈接進行網頁爬取,並且將新的鏈接存儲的數據庫中,採用類似隊列的方式對於網頁爬取鏈接進行處理。對於鏈接表中數據的設計要考慮到後期根據反向鏈接的數量進行搜索結果排序。將爬取和分析後的頁面存儲到內容表中,並且,分析模塊分析網頁建立詞項的倒排索引存儲到索引表中。

在質量要求方面要求對數據庫中的數據進行加密處理以及多個服務器之間的數據同步。我們的設計是多個服務器上的數據庫進行完全冗餘存儲,及多個數據庫中的數據同步。每個服務器進行網頁的爬取和分析以後要將本服務器新增的數據發送給另外的服務器以保持數據同步。

 

搜索模塊

         搜索模塊的主要功能是根據用戶的請求進行處理,返回給用戶搜索的結果。因爲多個服務器之前的數據庫是冗餘的,所以在搜索的時候只要對本服務器進行搜索即可。

         搜索模塊接受到用戶的請求,將用戶的請求進行分詞處理和近義詞處理。然後通過對索引表和內容表的查詢,搜索出結果集,並且根據鏈接表和競價表對結果集進行加權和排序。將排序後的結果集返回給用戶。

         在質量要求方面要求大量用戶的併發執行,要求多線程和良好的Bean容器。

 

用戶接口模塊

         用戶接口模塊運行在另外的一個web服務器上,該web服務器呈現網頁並接受用戶的請求,首先對用戶的輸入進行敏感詞分析,將分析過的請求發送到後臺服務器,並從後臺服務器獲得搜索結果,將結果顯示給用戶。

         質量上要求多用戶的併發,主要體現在要求良好web容器和多線程,以及在發送請求到後臺服務器時的負載均衡。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章