分布式检索系统的简单设计
(1) XML預處理
讀取test.xml并修改url節點下的localhost信息,以保證預覽和下載用戶所需正確資源。過程如下:
List list = document.selectNodes("allresource/resourceitem/url");
Iterator iter = list.iterator();
while (iter.hasNext()) {
Element url = (Element)iter.next();
String ur=url.getText();
String str1=ur.substring(0,7);
String str2=ur.substring(ur.indexOf(":8080"));
String str3=str1+LocalIP+str2;
url.setText(str3);
}
(2)服務器注冊、注銷和選舉
開啟服務器后,可以實現單機搜索。考慮到test.xml中關于服務器IP信息的不確定性,我們采取獲取本機IP后,在后臺手動輸入主服務器IP并添加從機的方式(詳細步驟請看用戶操作手冊)來實現服務器的分布式,這種方式能夠適合多種情況。
1、服務器初始化步驟如下:
(1)主服務器先行注冊后,開啟監聽服務
(2)從機獲取主服務器IP后存入本地XML中
(3)開啟RMI注冊服務,遠程機器實現向主服務器注冊、注銷
(4)每臺服務器將在線服務器的IP動態寫入本地的數據文件
(5)由Socket通信服務監聽各服務器狀態
2、從機向主服務器遠程注冊成功和注銷成功后,主服務器會通知已連接在線的其他從機有新的機器加入或有機器掉線。當由于網絡不穩定等異常發生導致主服務器掉線,通過選舉算法在從機中選舉出新主服務器,其他從機向新主服務器注冊建立連接,以保證用戶能繼續搜索。
3、具體實現通過Socket通信技術,主服務器端開啟監聽服務,監聽已注冊客戶端的狀態,當有客戶端因為異常掉線時,主服務器通過線程負責通知其他從機該客戶端已不在線。已注冊客戶端向服務端發送信息并接受主服務器端的反饋信息,當客戶端沒有收到服務器端信息時,說明主服務器因異常掉線,各客戶端相互通知,并通過選舉算法選舉出新主服務器。
(3) 拼音搜索功能
該搜索引擎實現拼音搜索功能。因為直接實現拼音轉為漢字較為困難,我們通過將資源關鍵字以及對應拼音寫入數據庫,實現拼音搜索功能。
實現步驟:
在服務器啟動時,檢索xml文件。
將xml中所有關鍵字檢索,并利用pinyin4j包分別將所有關鍵字轉化為對應拼音。
將漢字及其對應拼音作為一行記錄寫入數據庫中。
搜索時,從數據庫中提取出與輸入拼音相對應的關鍵字,作為參數傳遞給搜索方法,進行搜索。
(4)搜索過程
?? 1.分詞.
索引過程與搜索過程中運用的是JE分詞器,JE分詞器是一款輕量級的、易于安裝的分詞器,只需將包導入項目的lib中即可,JE分詞器分詞效率不錯,準確度也不錯。
?2.索引.
用dom4j讀取xml文檔,將節點信息封裝進javabean中,然后利用lucene建立倒排索引表。
?3.普通搜索.
判斷輸入的關鍵字是否為拼音,如果為拼音則查詢數據庫選出相應的漢語。然后,然后利用JE分詞器將關鍵字分詞,建立關鍵字數組,遍歷關鍵字數組,通過TermQuery建立BooleanQuery,然后對索引進行查找。
?4.模糊查找.
判斷輸入的關鍵字是否為拼音,如果為拼音則查詢數據庫選出相應的漢語。然后,然后利用JE分詞器將關鍵字分詞,建立關鍵字數組,遍歷關鍵字數組,通過FuzzyQuery建立BooleanQuery,然后對索引進行查找。
?? 5.按種類進行搜索.
在普通搜索的基礎上,通過重寫了lucene的過濾器,對多種格式的文件進行了過濾,以實現按類別查找。
???? 6.高級搜索.
包括包含多關鍵字的搜索,包一任意關鍵字的搜索,包含完整關鍵字的搜索以及前綴搜索。包含多關鍵字可以通過BooleanQuery的MUST和SHOULD屬性來實現。包含任一關鍵字用BooleanQuery實現。包含完整關鍵字可以通過不對關鍵字進行分詞而直接對索引進行搜索的方式來實現。前綴搜索可以通過lucene的PrefixQuery來實現。
高級搜索還添加了不包含關鍵字,資源的作者和上傳者等限制條件,這些都是通過重寫lucene過濾器實現的.
? 7.高亮顯示模塊.
利用lucene的 Highlighter 類對于關鍵字匹配的信息進行變紅處理,以供前臺的高亮顯示。
??? 8.對結果集的去除重復處理.
利用自己編寫的方法將檢索結果中的重復項去掉,然后通過冒泡排序算法對分布式檢索的結果進行排序,排序是比較的是文檔的得分。lucene對文檔的匹配程度的衡量有一套評分公式,通過計算得出每個文檔的得分情況,通過得分來評價文檔的相關程度。
?? 9.將返回結果輸出到jsp頁面上.
??? lucene : Lucene是一套用于全文檢索和搜尋的開源程式庫,由Apache軟件基金會支持和提供。Lucene提供了一個簡單確強大的應用程式接口,能夠做全文索引和搜尋,在Java開發環境里Lucene是一個成熟的免費開放源代碼工具;
dom4j:dom4j是一個非常非常優秀的Java XML API,具有性能優異、功能強大和極端易用使用的特點,同時它也是一個開放源代碼的軟件
(4)后臺管理
???? 1、用戶注冊:用戶可以通過用戶注冊登陸我們的系統,成為用戶,出于對資源安全的考慮,我們只允許已經注冊過得用戶上傳資源,然后就可以使用我們的上傳功能。
???? 2、資源上傳:用戶可以通過上傳功能上傳包括(文檔,視頻,音頻,以及圖片),由于我們有大小以及格式的限制,所以會有一些格式的文件不
上傳;
???? 3、資源審核:對于用戶上傳的資源并不是直接就能搜索到的,而是要通過后臺管理員的確定,這里我們完成的是對已經上傳的資源的審核功能,
定其合法性和有用性。
???? 4、上傳功能:在這里我們可以把已經通過審核的資源批量的上傳,并且建立起索引,直接就可以把他們搜索出來。
???? 5、普通刪除:管理員可以通過普通刪除把不需要的文件進行刪除,這里支持單個刪除也可以批量刪除。
???? 6、時間刪除:管理員可以把已經過時的文件通過時間刪除進行刪除,進行文件的更新。
??? 用戶列表:管理員查看用戶列表信息,可以在這里把已經注冊的用戶進行刪除。
???? 7、服務器添加:可以手動的添加服務器;
???? 8、服務器列表:可以查看在線的服務器
轉載于:https://www.cnblogs.com/yimindu/p/3367030.html
總結
以上是生活随笔為你收集整理的分布式检索系统的简单设计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Firefox火狐广告过滤插件Adblo
- 下一篇: java信息管理系统总结_java实现科