摘 要:本文基于Java體系開源框架Spring3.0、Struts2、Hibernate3.3和Compass2.1設(shè)計與實現(xiàn)了一個B/S模式的圖書文獻全文檢索系統(tǒng),系統(tǒng)采用MVC框架,集成Spring3.0、Struts2、Hibernate3.3實現(xiàn)AOP以及事務(wù)管理、控制層、數(shù)據(jù)持久層,應(yīng)用Compass實現(xiàn)索引的創(chuàng)建與數(shù)據(jù)庫同步更新,系統(tǒng)應(yīng)用在圖書館海量圖書文獻的檢索中,比傳統(tǒng)的C/S模式的基于SQL的數(shù)據(jù)庫檢索系統(tǒng),檢索結(jié)果的呈現(xiàn)要提高數(shù)倍,耗時為毫秒級。
關(guān)鍵詞:Java開源框架全文檢索索引
中圖分類號:G250文獻標識碼:A文章編號:1674-098X(2011)06(a)-0019-01
1 引言
C/S模式的軟件,客戶端需要安裝專用的軟件才能和服務(wù)器通信,只適用于局域網(wǎng),需要針對不同的操作系統(tǒng)開發(fā)不同版本的軟件,產(chǎn)品更新?lián)Q代快、維護代價高、執(zhí)行效率低。對于擁有上百萬館藏資源的高校圖書館,讀者檢索數(shù)據(jù),必須要到圖書館利用檢索機才可以,這在當今互聯(lián)網(wǎng)時代,這已經(jīng)不能滿足讀者想隨時隨地通過網(wǎng)絡(luò)快速得到檢索數(shù)據(jù)的需求。
B/S模式是隨著Internet技術(shù)的興起迅速發(fā)展,能實現(xiàn)不同用戶從不同地點,以不同的接入方式訪問服務(wù)器,能有效地保護數(shù)據(jù)平臺和訪問權(quán)限,大大簡化了客戶端電腦載荷,減輕了系統(tǒng)維護與升級的成本。
全文檢索系統(tǒng)是按照全文檢索理論建立起來的用于提供全文檢索服務(wù)的軟件系統(tǒng),需要具備建立索引和提供查詢的能力。功能上,全文檢索系統(tǒng)核心具有建立索引、處理查詢返回結(jié)果集、增加索引、優(yōu)化索引結(jié)構(gòu)等功能。結(jié)構(gòu)上,全文檢索系統(tǒng)核心具有索引引擎、查詢引擎、文本分析引擎、對外接口等,加上各種外圍應(yīng)用系統(tǒng)等共同構(gòu)成了全文檢索系統(tǒng)。
2 全文檢索引擎
Lucene[1]是一個開放源代碼的全文檢索引擎工具包,具有索引文件格式獨立于應(yīng)用平臺的特點。在實際全文檢索中,建立索引,要么是定期遍歷數(shù)據(jù)庫,調(diào)用索引建立程序模塊將里面的數(shù)據(jù)轉(zhuǎn)為索引,要么是每次更新數(shù)據(jù)的時候,調(diào)用索引建立程序模塊將里面的數(shù)據(jù)轉(zhuǎn)為索引,兩種方式的共同缺點是頻繁更新索引數(shù)據(jù)將使對硬盤的操作影響巨大。
Compass是對Lucene的封裝,其擴展了事務(wù)索引、搜索引擎抽象、對象關(guān)系映射、事務(wù)管理、不同的映射技術(shù)在數(shù)據(jù)庫存儲索引的功能。Compass[2]的模塊主要如圖1所示。
Compass提供了以下兩種途徑來完成事務(wù)管理代碼簡化操作。
(1)CompassTemplate,它使用流行的設(shè)計模式來抽象事務(wù)管理。
(2)與Spring事務(wù)管理器集成,可以在一個存在的事務(wù)中執(zhí)行。
Compass通過OSEM(對象到搜索引擎映射)可以輕松地和Hibernate、Spring等無縫集成,索引庫能夠隨數(shù)據(jù)持久層同步更新。
3 系統(tǒng)實現(xiàn)
3.1 創(chuàng)建搜索對象
Hibernate[3]是數(shù)據(jù)持久化事實上的標準,功能強大、性能優(yōu)秀,與Compass通過注解方式創(chuàng)建OSEM對象模型,通過Compass抽象出需要的屬性,然后把它們對應(yīng)的元數(shù)據(jù)插入到搜索引擎索引中。
Book類對象搜索實體,代碼如下:
@Entity
@Table
@Searchable
public class Book
{
@SearchableProperty
private String title;
@SearchableProperty
private String content;
……
}
在搜索對象模型的建立中,需要過濾網(wǎng)頁樣式得到純文本,用于在搜索結(jié)果中顯示圖書文獻摘要信息。
3.2 索引的創(chuàng)建與更新
Compass Spring主要完成Compass和Spring的集成,在系統(tǒng)的application Context-compass.xml文件配置Compass。Compass內(nèi)核是Lucene,對中文處理可以采用單字分詞和雙字分詞,本系統(tǒng)采用了雙字分詞方法實現(xiàn)對中文文本分詞處理,這樣可以保障高效的分詞索引速度。
Compass Gps集成不同的數(shù)據(jù)源,通過Hibernate的ORM實現(xiàn),通過hibernate GpsDevice使得數(shù)據(jù)庫中的記錄變化后,可以使用Hibernate3事件系統(tǒng)支持的實時數(shù)據(jù)鏡像來自動同步更新索引。
3.3 分頁搜索模塊實現(xiàn)
系統(tǒng)采用Struts2[4]實現(xiàn)控制器,調(diào)用數(shù)據(jù)持久層的搜索模塊實現(xiàn)搜索,以分頁的形式顯示在視圖層,進行測試,搜索耗用的時間僅僅為0.01秒,文獻的標題和摘要都以高亮的形式顯示。
4 結(jié) 語
對于一個擁有海量數(shù)字資源的圖書館來說,讓用戶快速地、方便地、精準地查找到需要的圖書或者文獻,是圖書館資源檢索的迫切需求,本文分析了Java體系開源框架設(shè)計與實現(xiàn)了一個B/S模式的具體跨平臺、跨數(shù)據(jù)庫的搜索引擎,與傳統(tǒng)的數(shù)據(jù)庫檢索相比,大大減少了圖書館工作人員的工作量,方便了讀者查詢圖書館資源,讀者不必到圖書館就可以通過網(wǎng)絡(luò)查詢資料,檢索結(jié)果以毫秒級的耗時快速呈現(xiàn)給讀者。
參考文獻
[1]Apache Lucene. Apache Lucene - Overview [EB/OL].2010.
[2]Compass-Java Search Engine Framework.overview [EB/OL].2010.
[3]李剛.輕量級J2EE企業(yè)應(yīng)用實踐[M].北京:電子工業(yè)出版社.2007(6).