一種svn全文檢索系統(tǒng)及檢索方法
【專利摘要】本發(fā)明公開了一種SVN全文檢索系統(tǒng)及檢索方法,SVN版本庫;提交偵測模塊,其與SVN版本庫交互;變更文檔抽取模塊,其與提交偵測模塊、SVN版本庫相連;變更文檔索引模塊,其分別與變更文檔抽取模塊及Lucene索引檢索庫相連;版本過濾器構建模塊,其與變更文檔抽取模塊相連;修訂版本過濾器存貯模塊,其與版本過濾器構建模塊相連;修訂版本更新文件過濾器構建模塊,其與修訂版本過濾器存貯模塊相連;全文索引啟動模塊,其與提交偵測模塊及修訂版本過濾器存貯模塊相連;全文檢索執(zhí)行模塊,其與修訂版本過濾器存貯模塊、修訂版本更新文件過濾器構建模塊及Lucene索引檢索庫相連。本發(fā)明能夠實現Subversion文件庫的全文檢索,提升Subversion文件庫中文檔資源發(fā)現與定位的效率。
【專利說明】—種SVN全文檢索系統(tǒng)及檢索方法
【技術領域】
[0001]本發(fā)明涉及開發(fā)工具與環(huán)境、軟件配置管理與文檔資源管理的【技術領域】,特別涉及SVN全文檢索系統(tǒng)及檢索方法。
【背景技術】
[0002]Subvers1n(簡稱SVN)是一款主流的、開源的版本控制系統(tǒng)。Subvers1n允許用戶在各自的空間修改和管理同一組數據,記錄數據修改情況,并可以籍此將數據恢復到以前的版本與查看數據的修改細節(jié)。Subvers1n促進開發(fā)團隊協作,實現版本控制管理,具有強大的功能和廣泛的應用,但Subvers1n與其客戶端軟件如WebSVN、TortoiseSVN等并不提供Subvers1n文件庫的全文檢索功能。當用戶需要某個文檔資料但不知其具體的存儲位置與版本時,用戶只能逐個修訂版本、逐個文件路徑采用手動的方式瀏覽尋找。伴隨Subvers1n文檔庫中文檔資源的數量和修訂版本號碼的增加,通過手動的方式找出所需要文檔資料的難度大大增加,查找資料浪費的時間大大增加。
[0003]Lucene是一個知名的開放源代碼全文檢索引擎,但Lucene并不支持版本化數據的全文索引和索引文檔的版本化管理。同時,Subvers1n采用全局修訂版本號,文檔庫的各修訂版本間通常存在大量相同的文檔和少量發(fā)生變更的文檔。因此,針對Subvers1n的文檔版本管理機制與修訂版本的變更情況,需要一種基于Lucene的高性能的Subvers1n文檔庫全文檢索方法,特別是限定特定修訂版本號碼的檢索,包括僅在該修訂版本發(fā)生變動的文檔集中進行全文檢索,從而限定檢索的范圍與檢索結果的數量,提升Subvers1n文檔資源的檢索效率。
【發(fā)明內容】
[0004]本發(fā)明的目的是提供一種SVN全文檢索系統(tǒng)及檢索方法,實現Subvers1n文件庫的全文檢索,提升Subvers1n文件庫中文檔資源發(fā)現與定位的效率。
[0005]為了實現以上目的,本發(fā)明是通過以下技術方案實現的:
一種SVN全文檢索系統(tǒng),其特點是,包含:
SVN版本庫;
提交偵測模塊,其與SVN版本庫交互,偵測SVN版本庫中文件的新增與更新變化;變更文檔抽取模塊,其與提交偵測模塊、SVN版本庫相連,調用SVN版本庫的函數指令,從SVN版本庫獲取本版本提交變更的文檔集;
變更文檔索引模塊,其分別與變更文檔抽取模塊及Lucene索引檢索庫相連,所述的變更文檔索引模塊接收變更文檔抽取模塊傳遞過來的變更文檔集和發(fā)生變更的版本號,對變更文檔集進行全文索引;
版本過濾器構建模塊,其與變更文檔抽取模塊相連,當SVN版本庫中的版本變更時,所述的版本過濾器構建模塊接受變更文檔索引模塊的調用指令,獲取發(fā)生變更的文檔,并構建Lucene檢索文檔過濾器; 修訂版本過濾器存貯模塊,其與版本過濾器構建模塊相連;
修訂版本更新文件過濾器構建模塊,其與修訂版本過濾器存貯模塊相連,獲取修訂版本過濾器存貯模塊中相鄰兩個修訂版本的檢索過濾器;
全文索引啟動模塊,其與提交偵測模塊及修訂版本過濾器存貯模塊相連;
全文檢索執(zhí)行模塊,其與修訂版本過濾器存貯模塊、修訂版本更新文件過濾器構建模塊及Lucene索引檢索庫相連,所述的全文檢索執(zhí)行模塊調用修訂版本過濾器存貯模塊或者修訂版本更新文件過濾器構建模塊,獲取檢索過濾器,訪問Lucene索引檢索庫。
[0006]所述的變更文檔的索引包含:版本修訂號、文件完整路徑、文檔索引內容。
[0007]該全文檢索系統(tǒng)還包含檢索顯示模塊,其與全文檢索執(zhí)行模塊相連。
[0008]一種SVN全文檢索方法,其特點是,該方法包含如下步驟:
SI,提交偵測模塊偵測SVN版本庫中文件的新增與更新變化;
S2,變更文檔集抽取模塊調用SVN版本庫的函數指令,從SVN版本庫獲取本版本提交變更的文檔集;
S3,變更文檔索引模塊接收變更文檔抽取模塊傳遞過來的變更文檔集和發(fā)生變更的版本號,對變更文檔集進行全文索引;
S4,版本過濾器構建模塊接受變更文檔集索引模塊的調用指令,獲取發(fā)生變更的文檔,并構建Lucene檢索文檔過濾器;
S5,修訂版本過濾器存貯模塊存儲管理Lucene檢索文檔過濾器;
S6,修訂版本更新文件過濾器構建模塊獲取修訂版本過濾器存貯模塊中相鄰兩個修訂版本的檢索過濾器;
S7,全文檢索執(zhí)行模塊調用修訂版本過濾器存貯模塊或者修訂版本更新文件過濾器構建模塊,獲取檢索過濾器,訪問Lucene索引檢索庫。
[0009]所述的步驟S4包含:
S4.1,獲取當前需要構建過濾器的修訂版本號,所述的修訂版本號設為revNo ;
S4.2,獲取變更文檔的URL數組列表,并獲取載生變更文檔的數量,該數量設為changeddocNo ;
S4.3,獲取修訂版本號revNo-Ι的過濾器prevBitSet,所述的過濾器prevBitSet位數為 preSetSize ;
S4.4,初始化生成當前修訂版本revNo的過濾器curBitSet,該過濾器curBitSet長度為 preSetSize+changeddocNo ;
S4.5,設置過濾器curBitSet中O?preSetSize位的值;
S4.6,設置過濾器curBitSet中變更文檔對應位為false ;
S4.7 設置過濾器 curBitSet 中的 preSetSize 到 preSetSize+changeddocNo-Ι 位的值; S4.8,返回構建的當前更新版本的過濾器curBitSet。
[0010]所述的步驟6包含如下步驟:
S6.1,獲取需要構建更新文檔過濾器的修訂版本號revNo ;
S6.2,獲取修訂版本號revNo-Ι的過濾器prevBitSe,并獲取過濾器prevBitSe的位數為 preSetSize ;
S6.3,獲取修訂版本號revNo的過濾器curBitSet,并獲取過濾器curBitSet的位數為curSetSize ;
S6.4,獲取最大修訂版本號的過濾器maxBitSet,并獲取該過濾器的位數設為maxSetSize ;
S6.5,初始生成revNo的更新文檔過濾器UpdateBitSet ;
S6.6,設置更新文檔過濾器UpdateBitSet中(TpreSetSize-Ι位的值;
S6.7,設置更新文檔過濾器UpdateBitSet中preSetSize?curSetSize-Ι位的值;
S6.8,設置最大修訂版本號的過濾器maxBitSet中curSetSize?maxBitSize-Ι位的值;
S6.9,返回構建的修訂版本更新文檔過濾器updateBitSet。
[0011]本發(fā)明與現有技術相比,具有以下優(yōu)點:
(I)實現修訂版本變更文檔的增量化索引,其不僅加快索引速度,降低索引存貯空間,而且可以顯著地提升索引的性能。
[0012](2)通過自定義的過濾器,在增量化索引的機制上實現完整修訂版本文檔索引的構建和變更文檔索引的構建,實現僅在特定修訂版本或該版本發(fā)生變更的文檔集中進行全文索引檢索,能縮小檢索訪問,提升檢索的精度。
[0013](3)通過一次性構建、持久化存貯和內存緩存的過濾器實現機制,而不是檢索時每次遍歷Lucene索引庫進行過濾器重構的機制,進一步提升了 Subvers1n精確化全文檢索的性能。
【專利附圖】
【附圖說明】
[0014]圖1為本發(fā)明一種SVN全文檢索系統(tǒng)的系統(tǒng)框圖;
圖2為本發(fā)明一種SVN全文檢索方法中步驟S4的流程圖;
圖3為本發(fā)明一種SVN全文檢索方法中步驟S6的流程圖。
【具體實施方式】
[0015]以下結合附圖,通過詳細說明一個較佳的具體實施例,對本發(fā)明做進一步闡述。
[0016]如圖1所示,一種SVN全文檢索系統(tǒng),包含:SVN版本庫111 ;提交偵測模塊101,其基于周期性的輪詢方法或者Subvers1n的事件捕獲機制,與SVN版本庫交互,偵測SVN版本庫中文件的新增與更新變化;變更文檔抽取模塊102,其與提交偵測模塊、SVN版本庫相連,調用SVN版本庫的函數指令,從SVN版本庫獲取本版本提交變更的文檔集;變更文檔索引模塊103,其分別與變更文檔抽取模塊102及Lucene索引檢索庫112相連,變更文檔索引模塊103接收變更文檔抽取模塊傳遞過來的變更文檔集和發(fā)生變更的版本號,對變更文檔集進行全文索引,變更文檔的索引包含:版本修訂號、文件完整路徑、文檔索引內容;版本過濾器構建模塊104,其與變更文檔抽取模塊102相連,當SVN版本庫中的版本變更時,所述的版本過濾器構建模塊接受變更文檔集索引模塊的調用指令,獲取發(fā)生變更的文檔,并構建Lucene檢索文檔過濾器,Lucene檢索文檔過濾器運用BitSet表達與存忙Lucene索引文檔庫中僅屬于該修訂版本的文檔,用于Lucene檢索引擎針對特定修訂版本文檔的進行過濾,實現特定版本化的文檔檢索;修訂版本過濾器存貯模塊105,其與版本過濾器構建模塊相連,針對Subvers1n版本庫的各個修訂版本,實現其相應過濾器BitSet的存貯管理。各修訂版本過濾器的存貯管理包括兩種存貯機制:一是持久化存貯機制,通過文件、數據庫或其它方法于計算機外存存貯過濾器;二是于內存的高速緩存,基于Hash的思想,運用Memcached等技術,實現各修訂版本過濾器的高速緩存并供各檢索線程共享,用以提升Subvers1n全文檢索的性能;修訂版本更新文件過濾器構建模塊106,其與修訂版本過濾器存貯模塊相連,獲取修訂版本過濾器存貯模塊中相鄰兩個修訂版本的檢索過濾器;全文索引啟動模塊107,其與提交偵測模塊101及修訂版本過濾器存貯模塊105相連,其為整個系統(tǒng)的初始化啟動模塊;全文檢索執(zhí)行模塊109,其與修訂版本過濾器存貯模塊105、修訂版本更新文件過濾器構建模塊106及Lucene索引檢索庫112相連,全文檢索執(zhí)行模塊109調用修訂版本過濾器存貯模塊105或者修訂版本更新文件過濾器構建模塊106,獲取檢索過濾器,訪問Lucene索引檢索庫,調用Lucene的全文檢索引擎;檢索顯示模塊110,其與全文檢索執(zhí)行模塊相連,用于顯示全文檢索的結果。
[0017]全文檢索執(zhí)行模塊109輸入端還連接有用戶檢索需求獲取模塊108,該模塊提供前端客戶端,通過桌面應用軟件或Web應用軟件的方式向用戶提供全文索引需求填寫的界面,用戶填寫全文檢索的關鍵詞,提供限定特定檢索范圍修訂版本號,選擇是否僅在該版本變更的文檔集中進行檢索的選項,并打包用戶的檢索需求傳遞給全文檢索執(zhí)行模塊109。
[0018]一種SVN全文檢索方法,該方法包含如下步驟:
SI,提交偵測模塊偵測SVN版本庫中文件的新增與更新變化;
S2,變更文檔集抽取模塊調用SVN版本庫的函數指令,從SVN版本庫獲取本版本提交變更的文檔集;
S3,變更文檔索引模塊接收變更文檔抽取模塊傳遞過來的變更文檔集和發(fā)生變更的版本號,對變更文檔集進行全文索引;
S4,版本過濾器構建模塊接受變更文檔集索引模塊的調用指令,獲取發(fā)生變更的文檔,并構建Lucene檢索文檔過濾器;
S5,修訂版本過濾器存貯模塊存儲管理Lucene檢索文檔過濾器;
S6,修訂版本更新文件過濾器構建模塊獲取修訂版本過濾器存貯模塊中相鄰兩個修訂版本的檢索過濾器;
S7,全文檢索執(zhí)行模塊調用修訂版本過濾器存貯模塊或者修訂版本更新文件過濾器構建模塊,獲取檢索過濾器,訪問Lucene索引檢索庫。
[0019]如圖2所示,步驟S4包含:
S4.1,獲取當前需要構建過濾器的修訂版本號,所述的修訂版本號設為revNo ;
S4.2,獲取變更文檔的URL數組列表changedDocUrls,并獲取載生變更文檔的數量,該數量設為 changeddocNo ;
S4.3,從修訂版本過濾器存貯模塊105獲取修訂版本號revNo-Ι的過濾器prevBitSet,過濾器 prevBitSet 位數為 preSetSize ;
S4.4,初始化生成當前修訂版本revNo的過濾器curBitSet,因Lucene索引庫新增加了變更的changeddocNo個文檔,故而該過濾器curBitSet長度為preSetSize+changeddocNo ;
S4.5,設置過濾器curBitSet中(TpreSetSize位的值,基于前一修訂版本過濾器prevBitSet設置過濾器curBitSet中前preSetSize位的初始值,即其初始值保持與prevBitSet過濾器中各對應值一致,因版本間大部分文檔未發(fā)生變更。;
S4.6,設置過濾器curBitSet中變更文檔對應位為false,針對每個變更文檔的Url(統(tǒng)一資源定位符),查找Lucene索引庫,于索引文檔庫中找到路徑字段值等于該Url的文檔及其相應的文檔編號docld,如果在過濾器curBitSet中對應位置為true,則表明該文檔屬于前一修訂版本,因為該值來源于步驟4.5中從過濾器prevBitSet設置,現在該文檔已發(fā)生變更具有新版本,故其不屬于當前版本的文檔集,所以過濾器對應文檔位置設置為false ;
S4.7 設置過濾器 curBitSet 中的 preSetSize 到 preSetSize+changeddocNo-Ι 位的值,針對新變更文檔進行增量索引存忙,其于Lucene中存忙的文檔編號是PreSetSize^preSetSize+changeddocNo-1,故改部分文檔全部屬于當前修訂版本的索引文檔,故過濾器中相應各位全設置為true ;
S4.8,返回構建的當前更新版本的過濾器curBitSet。
[0020]如圖3所示,步驟6包含如下步驟:
S6.1,全文檢索執(zhí)行模塊109獲取需要構建更新文檔過濾器的修訂版本號revNo ;
S6.2,修訂版本過濾器存貯模塊105獲取修訂版本號revNo-Ι的過濾器prevBitSe,并獲取過濾器prevBitSe的位數為preSetSize ;
S6.3,修訂版本過濾器存貯模塊105獲取修訂版本號revNo的過濾器curBitSet,并獲取過濾器curBitSet的位數為curSetSize ;
S6.4,修訂版本過濾器存貯模塊105獲取最大修訂版本號的過濾器maxBitSet,并獲取該過濾器的位數設為maxSetSize, maxSetSize代表了 Lucene索引庫中所索引文檔的總數;
S6.5,初始生成revNo的更新文檔過濾器updateBitSet,因Lucene索引庫中文檔總數為 maxSetSize,故其位數應為 maxSetSize ;
S6.6,設置更新文檔過濾器updateBitSet中O?preSetSize-Ι位的值,基于preSetBit可知,Lucene索引庫中前preSetSize個文檔,其為revNo修訂版本或更前面修訂版本的文檔,故不是revNo修訂版本的更新文檔,故過濾器對應文檔位置設置為false ;
S6.7,設置更新文檔過濾器updateBitSet中preSetSize?curSetSize-Ι位的值,Lucene索引庫中preSetSize^curSetSize間的文檔,其為revNo修訂版本發(fā)生變更的文檔,故更新文檔過濾器過濾器對應文檔位置設置為true ;
S6.8,設置最大修訂版本號的過濾器maxBitSet中curSetSize?maxBitSize-Ι位的值,Lucene索引庫中curSetSize"maxBitSize_l間的文檔,是revNo之后修訂版本新增加的索引文檔,故不是revNo修訂版本的更新文檔,故過濾器對應文檔位置設置為false ;
S6.9,返回構建的修訂版本更新文檔過濾器updateBitSet。
[0021]綜上所述,本發(fā)明一種SVN全文檢索系統(tǒng)及檢索方法,實現Subvers1n文件庫的全文檢索,提升Subvers1n文件庫中文檔資源發(fā)現與定位的效率。
[0022]盡管本發(fā)明的內容已經通過上述優(yōu)選實施例作了詳細介紹,但應當認識到上述的描述不應被認為是對本發(fā)明的限制。在本領域技術人員閱讀了上述內容后,對于本發(fā)明的多種修改和替代都將是顯而易見的。因此,本發(fā)明的保護范圍應由所附的權利要求來限定。
【權利要求】
1.一種SVN全文檢索系統(tǒng),其特征在于,包含: SVN版本庫; 提交偵測模塊,其與SVN版本庫交互,偵測SVN版本庫中文件的新增與更新變化;變更文檔抽取模塊,其與提交偵測模塊、SVN版本庫相連,調用SVN版本庫的函數指令,從SVN版本庫獲取本版本提交變更的文檔集; 變更文檔索引模塊,其分別與變更文檔抽取模塊及Lucene索引檢索庫相連,所述的變更文檔索引模塊接收變更文檔抽取模塊傳遞過來的變更文檔集和發(fā)生變更的版本號,對變更文檔集進行全文索引; 版本過濾器構建模塊,其與變更文檔抽取模塊相連,當SVN版本庫中的版本變更時,所述的版本過濾器構建模塊接受變更文檔索引模塊的調用指令,獲取發(fā)生變更的文檔,并構建Lucene檢索文檔過濾器; 修訂版本過濾器存貯模塊,其與版本過濾器構建模塊相連; 修訂版本更新文件過濾器構建模塊,其與修訂版本過濾器存貯模塊相連,獲取修訂版本過濾器存貯模塊中相鄰兩個修訂版本的檢索過濾器; 全文索引啟動模塊,其與提交偵測模塊及修訂版本過濾器存貯模塊相連; 全文檢索執(zhí)行模塊,其與修訂版本過濾器存貯模塊、修訂版本更新文件過濾器構建模塊及Lucene索引檢索庫相連,所述的全文檢索執(zhí)行模塊調用修訂版本過濾器存貯模塊或者修訂版本更新文件過濾器構建模塊,獲取檢索過濾器,訪問Lucene索引檢索庫。
2.如權利要求1所述的SVN全文檢索系統(tǒng),其特征在于,所述的變更文檔的索引包含:版本修訂號、文件完整路徑、文檔索引內容。
3.如權利要求1所述的SVN全文檢索系統(tǒng),其特征在于,還包含檢索顯示模塊,其與全文檢索執(zhí)行模塊相連。
4.一種SVN全文檢索方法,其特征在于,該方法包含如下步驟: SI,提交偵測模塊偵測SVN版本庫中文件的新增與更新變化; S2,變更文檔集抽取模塊調用SVN版本庫的函數指令,從SVN版本庫獲取本版本提交變更的文檔集; S3,變更文檔索引模塊接收變更文檔抽取模塊傳遞過來的變更文檔集和發(fā)生變更的版本號,對變更文檔集進行全文索引; S4,版本過濾器構建模塊接受變更文檔集索引模塊的調用指令,獲取發(fā)生變更的文檔,并構建Lucene檢索文檔過濾器; S5,修訂版本過濾器存貯模塊存儲管理Lucene檢索文檔過濾器; S6,修訂版本更新文件過濾器構建模塊獲取修訂版本過濾器存貯模塊中相鄰兩個修訂版本的檢索過濾器; S7,全文檢索執(zhí)行模塊調用修訂版本過濾器存貯模塊或者修訂版本更新文件過濾器構建模塊,獲取檢索過濾器,訪問Lucene索引檢索庫。
5.如權利要求4所述的全文檢索方法,其特征在于,所述的步驟S4包含: S4.1,獲取當前需要構建過濾器的修訂版本號,所述的修訂版本號設為revNo ; S4.2,獲取變更文檔的URL數組列表,并獲取載生變更文檔的數量,該數量設為changeddocNo ; S4.3,獲取修訂版本號revNo-1的過濾器prevBitSet,所述的過濾器prevBitSet位數為 preSetSize ; S4.4,初始化生成當前修訂版本revNo的過濾器curBitSet,該過濾器curBitSet長度為 preSetSize+changeddocNo ; S4.5,設置過濾器curBitSet中O?preSetSize位的值; S4.6,設置過濾器curBitSet中變更文檔對應位為false ; S4.7 設置過濾器 curBitSet 中的 preSetSize 到 preSetSize+changeddocNo-Ι 位的值; S4.8,返回構建的當前更新版本的過濾器curBitSet。
6.如權利要求4所述的全文檢索方法,其特征在于,所述的步驟6包含如下步驟: S6.1,獲取需要構建更新文檔過濾器的修訂版本號revNo ; S6.2,獲取修訂版本號revNo-Ι的過濾器prevBitSe,并獲取過濾器prevBitSe的位數為 preSetSize ; S6.3,獲取修訂版本號revNo的過濾器curBitSet,并獲取過濾器curBitSet的位數為curSetSize ; S6.4,獲取最大修訂版本號的過濾器maxBitSet,并獲取該過濾器的位數設為maxSetSize ; S6.5,初始生成revNo的更新文檔過濾器UpdateBitSet ; S6.6,設置更新文檔過濾器UpdateBitSet中(TpreSetSize-Ι位的值; S6.7,設置更新文檔過濾器UpdateBitSet中preSetSize?curSetSize-Ι位的值; S6.8,設置最大修訂版本號的過濾器maxBitSet中curSetSize?maxBitSize-Ι位的值; S6.9,返回構建的修訂版本更新文檔過濾器updateBitSet。
【文檔編號】G06F17/30GK104166734SQ201410448235
【公開日】2014年11月26日 申請日期:2014年9月5日 優(yōu)先權日:2014年9月5日
【發(fā)明者】郜天宇, 任洪敏 申請人:上海海事大學