摘要:2013年7月,我參加了信息檢索系統的開發,在此次項目中,我擔任系統設計和開發的工做。該項目是在部門SHARE POINT 的基礎上,集SHARE POINT種各文檔的分類檢索,預覽,下載和顯示於一體,提供相似於百度搜索和百度文庫預覽的效果。本論文結合做者的實踐,討論了軟件體系架構風格在信息檢索系統中的運用,主要是數據流風格的使用。經過運用合理的軟件體系架構,咱們的項目取得了成功,不但提升了部門的辦公效率,並且在必定程度上提升了部門的信息化水平。web
本論文先介紹常見的五種類型的體系風格,而後介紹信息檢索系統的狀況,接着論述在此次工做中運用到的軟件體系架構的緣由,以及取得的效果,最後討論能夠改進的地方。數據庫
正文編程
軟件體系結構是某一特定領域中系統組織的慣用模式。體系結構定義了一個家族,即一個體繫結構定義了一個詞彙表和一些約束。詞彙表包括構件和鏈接件類型,約束主要是描述這些構件和鏈接件如何組合起來。設計模式
常見的軟件體系架構有以下五種:瀏覽器
1. 數據流風格:包括:管道過濾器風格,批處理風格。架構
2. 倉庫風格:包括數據庫,黑板系統和超文本。函數
3. 調用返回風格:分層風格,主程序子程序和麪向對象風格。設計
4. 虛擬機風格:包括解釋器,和基於規則的系統。對象
5. 獨立構件風格:包括進程通信和基於事件的系統。blog
管道過濾器風格,是數據流風格的一種,這種風格由稱之爲管道和過濾器組成,其中過濾器爲構件,提供輸入和輸出的接口,主要用於數據的過濾盒處理。管道爲鏈接件,用於鏈接各個過濾器。每個過濾器無需知道上一個過濾器的實際處理細節,即可以接收到來自上一個過濾器的數據進行加工,加工完畢,將數據經過管道傳輸給下一個過濾器。常見的例子有UNIX系統的SHELL編程。管道過濾器風格的優勢主要有以下幾個:1)因爲每個過濾器都是一個獨立的構件,因此能夠方便的更換。2)具備必定的並行性。缺點有以下幾個:1)不適合及時的交互式設計。2)因爲缺少統一的通信標準,數據的傳輸效率可能比較不高。
面向對象風格,是將數據的表示方法和它們對應的操做方法封裝在一個對象中。對象和對象之間經過函數和過程調用來交互。這種風格的構件就是對象,鏈接件就是函數和過程的調用。
基於事件的系統,這種系統,有點相似設計模式的觀察者模式,由構件公佈或者廣播一個或者多個事件,其餘構件的構件在此構件的事件上註冊。當這個事件被觸發時,當即通知在這個事件上註冊的過程。這種風格的構件是前面提到的構件,鏈接件是過程的註冊。
分層系統是一個層次結構,每一層爲上一層服務,並做爲下層的客戶。在一些層次系統中,除了一些精心挑選的輸出函數外,內部的層只對相鄰層可見。這樣,系統中的構件在一些層中實現了虛擬機(在另一些層次系統中層是部分不透明的)。鏈接件經過決定層間如何交互的協議來定義,其拓撲約束包括對相鄰層間交互的約束。
這種風格支持基於可增長抽象層的設計。這樣,容許將一個複雜的問題分解成一個增量步驟序列的實現。由於,每一層隻影響兩層,同時只要給相鄰層提供相同的接口,容許每次用不一樣的方法實現,一樣爲軟件重用提供了強大的支持。
在部門的平常辦公中,用到了SHARE POINT進行部門文檔的管理,包括各類設計素材圖,EXCEL報表,WORD文檔,CAD製圖,各類JPG等電子圖和複印件,PPT等,這些都以二進制存儲在了SHARE POINT的SQL SERVER數據庫中。因爲這些文檔的種類繁多,急需一套可以在多種文檔中進行查詢,檢索和提供下載,能進行在線閱讀的一個文檔檢索系統。
通過分析,系統的第一步是分詞,即對輸入的查詢關鍵詞進行分詞,咱們選用了中科院的ICTLAS,如輸入」截拳道李小龍「,那麼這個詞將會被智能分詞爲:」截拳道「和」李小龍「,系統將會檢索包含任意兩個詞之一的記錄。系統的第二步是查詢,在這裏,咱們須要根據第一步的分詞後的關鍵詞,在SQL SERVER中編寫模糊查詢語句,查詢相關的記錄,例如:SELECT 字段1,字段2,字段3 FROM 表 WHERE COLUMNNAME LIKE ‘%KEY%’.系統的第三步是進行反序列化,由於文檔都是以二進制的格式存儲,因此咱們須要根據第二步的查詢結果進行反序列化成對應格式的文檔,如DOC,PPT,XLT等格式。第四步是格式轉換,即將第三步各類格式的文檔統一轉換爲PDF。在這裏,咱們使用了第三方的DLL,叫作APOSE。這是一款很是好的文檔格式轉換構件,能在各類流行的文檔格式中進行完美的轉換。最後一步就是顯示,在這裏咱們選用了一款基於HTML5相似百度文庫的閱讀器顯示。
上述五個處理步驟,前一個步驟的輸入是下一個步驟的輸入,每個步驟負責各自的處理。查詢詞首先被分詞,而後查詢檢索,接着反序列,而後是轉換格式爲PDF,最後是顯示,數據流在管道中流動,如同批處理通常,故比較適合數據流風格,圖示以下:
系統中有須要改進的地方,如最後一步的顯示,由於是基於HTML5,因此瀏覽器的兼容性不是很好,通常只能在支持HTML5的瀏覽器上進行瀏覽。因此這個地方也是之後要改進的一個地方。由於採用了批處理的架構風格,因此之後要來修改也比較容易。