葉文珺,史習文
(上海電力學院計算機與信息工程學院,上海 200090)
互聯(lián)網(wǎng)時代的信息搜索無疑具有很高的實用價值,因此誕生了許多搜索引擎,如百度,谷歌等.搜索引擎大大方便了人們對于信息的查詢效率,同時也帶來了一些問題,如:不同的搜索引擎得出的結果可能存在差異;不同的搜索引擎的功能各不相同.
優(yōu)搜(USou)是一款自主設計的共享軟件,是一個整合式的搜索工具.其使用方法簡單,具備智能的信息分析、挑選搜索引擎及反饋結果的功能,具有可擴展性,并能在其平臺上不斷增加新的搜索功能.
優(yōu)搜采用組件架構[1],在優(yōu)搜平臺上向插件提供服務.優(yōu)搜的所有功能都是基于其松散的組件架構,安裝一種新的組件可以使優(yōu)搜提供新的服務接口,由插件訪問新的組件接口[2],從而產(chǎn)生新的功能.
整款系統(tǒng)由包含界面的主程序、各種組件和組件管理器組成,其功能由插件來實現(xiàn),優(yōu)搜的整體架構如圖1所示.其中,優(yōu)搜主程序是優(yōu)搜的界面,并不是一個組件,它通過訪問服務管理來對4個組件進行全局性操控.
優(yōu)搜的架構設計模仿了Office的開放對象訪問機制,每一個組件在使用此架構時,都有一個根容器和各個服務容器構成的服務容器樹.每一個節(jié)點的服務都可以一直向上傳遞,直到根部,而每一個節(jié)點請求服務時,都可以從根節(jié)點獲得.因此,根節(jié)點匯總了所有可提供的服務,當某個對象要請求服務時,只需向根節(jié)點發(fā)送信息即可.
上面涉及的所有服務都是通過服務管理組件的DLL來進行管理的,服務管理是優(yōu)搜組件式架構的核心,也是所有組件訪問另一個組件的橋梁.通過該模塊,一個組件可以訪問另一個組件的功能,而不需要知道該組件應該加載哪個文件,這使得各個組件之間成為一個松散的架構.也就是說,任意一個組件、功能性插件或主程序只需要知道其所要訪問的另一個組件的接口,就可以通過服務管理來查詢并訪問到相應功能.所有組件都包含著服務管理器接口,可以通過它得到其他組件的接口,這樣就可以通過一個組件操作其他的組件或與之進行通訊了.
圖1 優(yōu)搜整體架構
優(yōu)搜各組件功能如下.
(1)捕獲代理服務提供單詞捕獲功能的支持,用于捕獲用戶鼠標上的關鍵字.若沒有安裝該組件,則優(yōu)搜只能通過手動搜索,而不支持即指即搜功能.
(2)插件服務向優(yōu)搜提供插件式搜索服務支持,所能提供的服務包括讀取自定義配置文件,獲得指定插件接口,以及獲得所有插件名稱列表等.若沒有安裝該組件,則優(yōu)搜將無法支持插件,從而導致系統(tǒng)無法進行插件式搜索.
(3)搜索引擎服務提供對于上述兩款組件的控制使用功能.該組件包含智能分析模塊,用于搜索引擎的排序和用戶選擇結果的反饋支持.通過訪問該組件,優(yōu)搜主程序可以下達搜索執(zhí)行命令、插件選擇命令等.
(4)應用設置服務提供主程序設置值的讀取支持,向優(yōu)搜其他組件提供程序配置信息.通過該服務,可以讀取用戶設定的程序參數(shù),并調整其他服務的參數(shù).
為了根據(jù)用戶搜索的關鍵字選擇更好的搜索引擎結果,需要一個良好的插件排序機制.排序服務推薦的插件排序是依據(jù)其他用戶使用結果而得出的,根據(jù)每個插件的得分高低對其進行排序,并給出建議.其中,插件得分的高低是由其他用戶以前搜索該關鍵字的頻率所決定的.
優(yōu)搜支持兩種排序算法,即:基本排序算法和使用RankService的排序算法.
基本排序算法的思路比較簡單.首先,比較兩個結果的類型,結果類型的大小為枚舉值類型的大小;其次,當兩個結果類型相同時,就比較其用戶排序值,用戶排序值保存在一個變量里,用戶可以進行手動設置.
優(yōu)搜使用了一個反饋—學習—推薦的機制,通過其他用戶搜索關鍵字的反饋情況來給插件打分,并在其他用戶搜索這個關鍵字時給出較好的排序結果.
RankService根據(jù)其他用戶之前使用該關鍵字的體驗結果,采用頁面分析技術[3]對搜索引擎進行該關鍵字排名.隨著用戶結果反饋的增加,以及服務器的不斷學習,使得服務器可以得出更為精確的結果建議.
該排序算法使用RankService來查詢服務器推薦插件,并將服務器的推薦列入排序考慮的范圍.可以將搜索結果分為如下4種情況:
(1)單一結果且為強匹配如關鍵字為手機號碼時,搜索結果為該手機號碼的所屬城市等信息;
(2)單一結果且為正常匹配這種單一結果的匹配稱為正常單一匹配,如關鍵字為任意英語單詞時,程序無法確切地判斷出用戶是要搜索其翻譯,還是搜索有關這個單詞的其他信息,因此搜索結果為該英語單詞的解釋;
(3)集合式結果如關鍵字為任意文字時,搜索結果為與該關鍵字有關的鏈接;
(4)無匹配無法找到該關鍵字的結果時為無匹配.
4 種情況都含有一個值,其大小表示當搜索結果為該情況時搜索結果的優(yōu)先級級別,值越大,則優(yōu)先級別越高.
服務管理是優(yōu)搜組件式架構的核心,用于提供各種已配置組件的接口,是一個組件訪問另一個組件的中間站.主要包含以下兩個方面的內容.
(1)服務管理器接口與應用服務應用服務繼承于服務管理器接口.通過該接口可以安裝新的服務,并儲存服務接口,使得別的程序通過函數(shù)調用就可以獲得想要的組件服務,同時可以通過.NET反射機制加載組件[4].由于所有要加載的組件信息是與已安裝插件的信息一起保存在自定義配置文件中,因此當程序啟動時,優(yōu)搜主程序將讀入這個配置列表,并根據(jù)配置列表加載所有組件.
(2)儲存插件信息的類PluginInfo與Resported Result在服務管理組件中,PluginInfo是一個非常重要的類,它存儲了有關某項插件的所有信息.ResportedResult類定義了當前搜索中搜索結果的類型,若為集合式結果,則還保存了結果中所有的鏈接.
優(yōu)搜具有廣闊的發(fā)展前景.例如,可以在優(yōu)搜的平臺上為用戶開發(fā)出新的插件,同時還可以開發(fā)優(yōu)搜增值插件,為用戶提供消費品和推薦服務,并從這些企業(yè)收取適當?shù)馁M用,實現(xiàn)優(yōu)搜的商業(yè)價值.另外,可以對優(yōu)搜進一步開發(fā),產(chǎn)生更多的優(yōu)搜衍生品,如優(yōu)搜門戶等.
[1]ERICH Gamma.Design patterns-elements of reusable objectoriented software[M].北京:清華大學出版社,2005:351-377.
[2]CHRISTIAN Nagel.C#高級編程[M].第6版.北京:清華大學出版社,2008:1 124-1 142.
[3]周靜.ASP和ASP.NET頁面間的數(shù)據(jù)傳遞方式探索[J].微計算機信息,2006(3-5):114-115.
[4]KRZYSZTOF Cwalina..NET設計規(guī)范[M].第2版.北京:人民郵電出版社,2010:244-305.
(編輯白林雪)