摘 要: 針對目前學(xué)習(xí)平臺中信息簡單羅列,、組織層次不清晰的問題,利用.net平臺上的ASP.Net、SilverLight技術(shù)設(shè)計實現(xiàn)了一個B/S架構(gòu)的知識網(wǎng)絡(luò)系統(tǒng),。分析了樹形結(jié)構(gòu)的特點(diǎn),,提出了遞歸尋路徑法,將知識信息層次清晰地展現(xiàn)給用戶,,并實現(xiàn)節(jié)點(diǎn)間路徑的獲取,。通過對Lucene.Net全文檢索技術(shù)的研究,將其與SQL Server數(shù)據(jù)庫的索引技術(shù)相結(jié)合,實現(xiàn)了一個高效的檢索引擎。
關(guān)鍵詞: 知識網(wǎng)絡(luò); .Net; Lucene.Net,; 全文檢索
隨著計算機(jī)技術(shù)及網(wǎng)絡(luò)的普及,,人們對知識的獲取不只來源于學(xué)校課堂,很大一部分來源于網(wǎng)絡(luò)平臺,。如何為用戶提供一個層次清晰,、內(nèi)容豐富的網(wǎng)絡(luò)學(xué)習(xí)平臺,成為國內(nèi)外的研究熱點(diǎn)及網(wǎng)絡(luò)教學(xué)的趨勢[1],。傳統(tǒng)的網(wǎng)絡(luò)學(xué)習(xí)平臺大都信息分類簡單,,知識脈絡(luò)不夠清晰,而檢索系統(tǒng)大多是基于數(shù)據(jù)庫系統(tǒng)自帶的查詢命令,,如“like%keyword%”的形式實現(xiàn)檢索,。這種檢索方法不能分詞、不夠智能,、檢索結(jié)果的排列順序也不夠合理,。針對傳統(tǒng)網(wǎng)絡(luò)學(xué)習(xí)平臺的不足,本文提出的新型的網(wǎng)絡(luò)學(xué)習(xí)系統(tǒng)不僅提供對知識信息的解讀,,還分析知識內(nèi)部的聯(lián)系,,梳理知識脈絡(luò),將知識以立體網(wǎng)絡(luò)的形式展現(xiàn)給用戶,,從而使用戶對知識信息有更立體深刻的了解,;同時為了能夠保證用戶高效、準(zhǔn)確地檢索到需要的信息,本系統(tǒng)的檢索模塊中引入了新型的專用于.Net平臺的Lucene.Net全文檢索技術(shù),。Lucene.Net是一個類庫, 提供了簡單的函數(shù)接口, 可以方便地嵌入到各種應(yīng)用中實現(xiàn)全文索引與檢索功能[2],。目前Lucene全文檢索技術(shù)發(fā)展迅猛,很多項目都使用了Lucene作為其后臺的全文檢索引擎,,如Nutch(WebCrawler工具),,Hadoop(基于Lucene的分布式計算平臺)等[3]。本文通過對Lucene.Net的分析研究,,將其與SQL Server數(shù)據(jù)庫技術(shù)相融合,,實現(xiàn)效率高、搜索結(jié)果準(zhǔn)確的檢索引擎模塊,。
1 系統(tǒng)設(shè)計
本系統(tǒng)將零散的知識信息收集起來,進(jìn)行科學(xué)的整理,、分類,組織成一個知識網(wǎng)絡(luò),,通過高效的檢索模塊,,用戶可以查找到需要的信息,同時對知識的整體結(jié)構(gòu)也有了立體的了解,。根據(jù)對系統(tǒng)的功能性需求及特色的分析,,將系統(tǒng)分為如圖1所示的6個模塊。
1.1 系統(tǒng)模塊功能簡介
(1) 知識點(diǎn)信息資源模塊
此模塊收集信息,,對信息進(jìn)行科學(xué)的整理,、分類、存儲,將存儲在數(shù)據(jù)庫中的信息層次化地展現(xiàn)在客戶端頁面,。
(2) 知識點(diǎn)網(wǎng)絡(luò)模塊
此模塊在收集信息資源時,,建立信息之間的父子或兄弟關(guān)系,并將這種關(guān)系存儲在數(shù)據(jù)庫中,,逐步構(gòu)建知識的網(wǎng)絡(luò)結(jié)構(gòu),,為用戶提供清晰、立體的知識表現(xiàn)形式,。
(3) 系統(tǒng)搜索引擎模塊
利用SQL Server自有的索引功能及Lucene.Net全文檢索技術(shù),,建立高效的檢索系統(tǒng),通過識別用戶輸入的檢索詞,,系統(tǒng)地進(jìn)行模糊或精確查詢,,找到符合用戶要求的相關(guān)內(nèi)容,并進(jìn)行排序顯示,。
(4) 問答專區(qū)模塊
此模塊實現(xiàn)用戶提問,、回答、交流的功能,,增加了用戶間的有效溝通,,并使系統(tǒng)的設(shè)計更加人性化。
(5) 新聞通知模塊
此模塊用于管理系統(tǒng)新聞和通知,能夠?qū)崟r地將系統(tǒng)動態(tài)顯示給用戶,。
(6) 用戶管理模塊
此模塊用于對用戶的基本信息,、權(quán)限及知識信息的相關(guān)操作進(jìn)行管理。
根據(jù)對上述各個模塊的分析,,在SQL Server 2005中構(gòu)建了本系統(tǒng)的數(shù)據(jù)庫Knowledge,,數(shù)據(jù)庫中各表之間的關(guān)系如圖2所示。
1.2 系統(tǒng)架構(gòu)
本系統(tǒng)采用B/S架構(gòu),,編程語言為C#,所用技術(shù)為 .Net平臺下的ASP.NET,、Silverlight,,后臺數(shù)據(jù)庫為SQL Sever2005。從軟件設(shè)計上采用三層結(jié)構(gòu),,通常意義上的三層結(jié)構(gòu)就是將整個業(yè)務(wù)應(yīng)用劃分為:表現(xiàn)層,、業(yè)務(wù)邏輯層、數(shù)據(jù)訪問層,。區(qū)分層次的目的是為了實現(xiàn)“高內(nèi)聚,,低耦合”。為了展現(xiàn)知識結(jié)構(gòu)的動態(tài)網(wǎng)絡(luò),,本系統(tǒng)還建立了SilverLight應(yīng)用程序?qū)?。具體系統(tǒng)架構(gòu)如圖3所示。
2 系統(tǒng)關(guān)鍵模塊的實現(xiàn)
2.1 系統(tǒng)搜索引擎模塊
本系統(tǒng)為了保證用戶能夠高效,、準(zhǔn)確地搜索到需要的信息,,將適用于.Net平臺的Lucene.Net全文檢索技術(shù)和SQL Server索引技術(shù)相結(jié)合,構(gòu)建了一個新型的搜索引擎模塊,。
搜索引擎模塊采用多條件檢索,,知識信息的標(biāo)題、條目,、編輯人,、內(nèi)容都作為檢索條件存在。標(biāo)題,、條目,、編輯人是作為較短的信息存儲在數(shù)據(jù)庫中;而用戶編輯的內(nèi)容則作為一段很長的信息對象存儲在數(shù)據(jù)庫中,。為了達(dá)到比較高效的檢索效果,,本模塊對不同檢索條件使用不同的檢索技術(shù)。
對于標(biāo)題,、條目,、編輯人檢索條件,通過建立SQL Server數(shù)據(jù)庫的聚集和非聚集索引來實現(xiàn)對它們的快速查找。標(biāo)題的ID作為主鍵聚集索引,,而編輯人ID作為連接知識表和編輯人表的外鍵,,設(shè)定為非聚集索引,條目ID作為條目表的主鍵聚集索引,。這樣在建立好索引后,,利用查詢語句“like%keyword%”對數(shù)據(jù)庫進(jìn)行查詢,效率能夠提高50%左右,。
對于用戶編輯的內(nèi)容,,本文利用Lucene.Net技術(shù),實現(xiàn)全文檢索,。Lucene.Net是基于Java的全文索引工具包Lucene的.Net移植版本,。Lucene不是一個完整的全文檢索引擎,而是一個全文檢索引擎的架構(gòu),,提供了完整的查詢引擎和索引引擎及部分文本分析引擎,。Lucene的目的是為軟件開發(fā)人員提供一個簡單易用的工具包,以便在目標(biāo)系統(tǒng)中實現(xiàn)全文檢索的功能,,或者以此為基礎(chǔ)建立起完整的全文檢索引擎[5],。
Lucene.Net全文檢索模塊的架構(gòu)如圖4所示。
Lucene.Net的工作流程如下:
(1) 由于是為數(shù)據(jù)庫中的內(nèi)容建立全文索引,,所以建立與數(shù)據(jù)庫的連接,。
(2) 利用IndexWriter創(chuàng)建索引;IndexWriter是Lucene.Net的索引器,,其主要作用是對索引進(jìn)行創(chuàng)建,,加入Document。其構(gòu)造函數(shù)IndexWriter(Directory d,、 Analyzer a,、bool create)中的參數(shù)分別代表索引路徑,使用哪種分詞類,,是否重建索引[5],。
(3) 將需要檢索的數(shù)據(jù)(本文為數(shù)據(jù)表中的字段信息)轉(zhuǎn)換為Document的Field對象,然后將Document添加到索引文件中,;
(4) 搜索:利用QueryParser類對查詢字符串的解析,,將查詢關(guān)鍵詞轉(zhuǎn)換為搜索用的Query;使用IndexSearcher進(jìn)行檢索,;在本系統(tǒng)中用到的是Lucene.Net的多字段檢索及多索引目錄搜索,,多索引目錄搜索就是要在多個索引目錄中進(jìn)行比較搜索,類似概念在SQL中就是select * from TableA union select * from TableB,。用到的檢索語句為:
IndexSearcher[] searchers=new IndexSearcher[2];
searchers[0]=new IndexSearcher(IndexPath0);
searchers[1]=new IndexSearcher(IndexPath1);
MultiSearcher multisearcher=new MultiSearcher(searchers);
(5) 檢索結(jié)果的顯示:Hits類取得查詢得到的內(nèi)容,。
2.2 知識點(diǎn)網(wǎng)絡(luò)模塊
一般來說網(wǎng)絡(luò)結(jié)構(gòu)是由N個復(fù)雜的樹形結(jié)構(gòu)組成,,其形狀表現(xiàn)為二維或三維網(wǎng)絡(luò),如圖5為知識網(wǎng)絡(luò)的抽象圖,。而為了構(gòu)建一個立體的知識網(wǎng)絡(luò),,對各知識點(diǎn)之間的關(guān)系設(shè)定、樹形結(jié)構(gòu)存儲,、遍歷,、節(jié)點(diǎn)路徑等問題的處理顯得非常重要。此模塊主要負(fù)責(zé)兩個問題:一是為用戶提供清晰,、立體的知識網(wǎng)絡(luò),;二是為用戶提供一個尋找節(jié)點(diǎn)間路徑的方法。
2.2.1 樹形結(jié)構(gòu)的存儲
對于以上兩個問題的解決,,都涉及到樹形結(jié)構(gòu)在關(guān)系數(shù)據(jù)庫中存儲方式的問題,。
樹形結(jié)構(gòu)模型為不規(guī)則、可變化,、有序的,而關(guān)系數(shù)據(jù)庫為行列規(guī)則模型,,是固定不變的,、無序的。本文就涉及到父子關(guān)系在數(shù)據(jù)庫的存儲問題[4],。目前一般有兩種方法:分段編碼法和利用父指針的任意樹法,。分段編碼法即通過對樹節(jié)點(diǎn)逐級編碼,實現(xiàn)樹形結(jié)構(gòu)的存儲。這種方法需要預(yù)先設(shè)置分段的最大值,,即樹中任意節(jié)點(diǎn)的最大子節(jié)點(diǎn)數(shù),,由于各節(jié)點(diǎn)的節(jié)點(diǎn)數(shù)并不固定或均衡,容易造成內(nèi)存空間浪費(fèi)[5],。利用父指針的任意樹法,,一般采用與表1類似的表結(jié)構(gòu)。這種表結(jié)構(gòu)能夠很好地表示樹形結(jié)構(gòu)的本質(zhì),,并且空間利用率很高,,對于復(fù)雜的樹形結(jié)構(gòu)也能適應(yīng)。因此本文采用此存儲方法,。
2.2.2 知識網(wǎng)絡(luò)的構(gòu)建及節(jié)點(diǎn)路徑的獲取
通過系統(tǒng)后臺整理好的知識層次關(guān)系,,將關(guān)鍵節(jié)點(diǎn)的父、子,、兄節(jié)點(diǎn)進(jìn)行讀取,,利用SilverLight技術(shù),通過將節(jié)點(diǎn)模塊化,,動態(tài)地構(gòu)建知識網(wǎng)絡(luò)圖,。
對于樹形結(jié)構(gòu)節(jié)點(diǎn)路徑的獲取,,本系統(tǒng)使用遞歸尋路徑法。遞歸尋路徑法在數(shù)據(jù)表中只存放父子關(guān)系,,如表1所示,,并沒有進(jìn)行樹的多級編碼或設(shè)置層次列;所以若想取到某一知識點(diǎn)的全路徑,,需要通過遞歸函數(shù)來獲得,。
獲取某一指定節(jié)點(diǎn)路徑集的方法類命名為:GetPath。其內(nèi)部主要函數(shù)的執(zhí)行邏輯為圖6所示,。
2.3 知識點(diǎn)信息資源模塊
此模塊實現(xiàn)對知識信息資源的編輯,、整理、層次化展現(xiàn),。系統(tǒng)對知識信息的整理,,不能簡單地以電子百科書的方式簡單地羅列,而應(yīng)根據(jù)類別,、階段進(jìn)行整理,。這也正是本系統(tǒng)與維基百科、百度百科這樣的電子百科平臺的不同,。系統(tǒng)對每個知識信息塊下分幾個學(xué)習(xí)階段:基礎(chǔ)知識學(xué)習(xí)階段,、進(jìn)階階段、高級應(yīng)用階段,。每個階段又根據(jù)實際情況分設(shè)不同條目,,輔助不同層次的訪問者獲取知識財富。其基本的層次體系如圖7所示,。
本文基于.net平臺上的ASP.Net,、SilverLight技術(shù)設(shè)計實現(xiàn)了一個網(wǎng)絡(luò)學(xué)習(xí)系統(tǒng),對系統(tǒng)中各個模塊的功能進(jìn)行了簡要概述,。詳細(xì)分析了系統(tǒng)主要模塊的功能實現(xiàn),。在知識網(wǎng)絡(luò)模塊中,系統(tǒng)對于樹形結(jié)構(gòu)在關(guān)系數(shù)據(jù)庫中的存儲,,采用了父指針的任意樹法,,此方法更適用于復(fù)雜的網(wǎng)絡(luò)結(jié)構(gòu)的存儲與構(gòu)建,對于節(jié)點(diǎn)路徑的獲取,,系統(tǒng)提出了遞歸尋路徑法,,更加準(zhǔn)確、快速地實現(xiàn)了節(jié)點(diǎn)之間路徑的獲??;在搜索引擎模塊中,對于全文檢索的實現(xiàn),,使用了Lucene.Net技術(shù),,將Sql的模糊檢索改進(jìn)為Lucene下多條件字段和多索引目錄的全文檢索,,并將Lucene.Net的全文檢索技術(shù)與SQL Server的索引技術(shù)相結(jié)合,構(gòu)建了一個新型的搜索引擎模塊,,大大提高了檢索效率和檢索的精確度,。
參考文獻(xiàn)
[1] WELSH E T, WANBERG C R, BROWN K G. et al. Elearning: emerging uses, empirical results and future directions[J].International Journal of Training and Development, 2003, 7(4):245-258.
[2] 譚文堂,賀明科,,李 阜.基于Lucene.Net的分布式全文檢索系統(tǒng)[J].計算機(jī)應(yīng)用與軟件,2009, 26(9):142-145.
[3] 丘哲,,符滔滔,王學(xué)松.開發(fā)自己的搜索引擎[M].北京:人民郵電出版社,2010.
[4] 姚雄偉,,劉莉,,邸書靈,等.在數(shù)據(jù)庫上實現(xiàn)一種高效顯示的任意樹形結(jié)構(gòu)[J].河北省科學(xué)院學(xué)報,,2005,22(4):15-17.
[5] 夏明偉,,劉星沙.父子結(jié)點(diǎn)樹的樹枝串的形成方法[J].科技咨詢導(dǎo)報,2007(13):152-153.