999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

修訂限定的SVN全文檢索系統研究與實現

2017-12-08 03:15:51任洪敏趙要強張敬周
計算機應用與軟件 2017年11期

任洪敏 李 敏 趙要強 張敬周

1(上海海事大學計算機系 上海 200135) 2(青島西海岸新區管委會 山東 青島 266555) 3(上海神開石油設備有限公司 上海 201114) 4(上海上科信息技術研究所 上海 201206)

修訂限定的SVN全文檢索系統研究與實現

任洪敏1李 敏2趙要強3張敬周4

1(上海海事大學計算機系 上海 200135)2(青島西海岸新區管委會 山東 青島 266555)3(上海神開石油設備有限公司 上海 201114)4(上海上科信息技術研究所 上海 201206)

針對SVN版本倉庫數據檢索困難問題,開發一個基于Lucene的SVN全文檢索系統。結合版本控制管理工作特點,提出兩種修訂限定的SVN全文檢索方式。設計版本限定的SVN全文檢索系統體系結構,給出基于Lucene過濾器的版本限定實現算法,描述系統的關鍵實現技術。該系統提供了便捷的SVN全文檢索功能,提升了SVN文檔資源的檢索效率。

Subversion SVN Lucene 全文檢索

0 引 言

Subversion[1](SVN)是一款主流的、開源的版本控制系統。SVN允許用戶在各自的空間修改和管理同一組數據,記錄數據修改情況,并可以籍此將數據恢復到以前的版本與查看數據的修改細節。SVN促進開發團隊協作,實現版本控制管理,具有強大的功能和廣泛的應用,但SVN與其客戶端軟件如WebSVN[2]、TortoiseSVN[3]等并不提供SVN文件庫的全文檢索功能。當用戶需要某個文檔資料但不知其具體的存儲位置與版本時,用戶只能逐個修訂版本、逐個文件路徑采用手動的方式瀏覽尋找。伴隨SVN文檔庫中文檔資源的數量和修訂版本號碼的增加,通過手動的方式找出所需要文檔資料的難度大大增加,查找資料浪費的時間大大增加。

Lucene是一個知名的開放源代碼全文檢索引擎[4],但Lucene并不支持版本化數據的全文索引和索引文檔的版本化管理。因此,針對SVN的文檔版本管理機制與修訂版本的變更情況,需要一種基于Lucene的高性能的SVN文檔庫全文檢索系統。該系統不僅能夠實現全文檢索自身支持的與、或、非、相鄰等檢索邏輯運算。同時需要能夠面向版本管理數據的特點,提供與特定版本相關的全文檢索機制,以提升SVN文檔資源的檢索效率。

SVN系統采用全局修訂版本號、版本差異保存和混合修訂版本機制[5],各修訂版本間通常存在大量相同的文檔和少量發生變更的文檔。通常一個修訂版本中包含一系列不同修訂版本的各個文檔。與此對應,該修訂版本中各個文檔的全文索引數據應該同樣分散存在于不同修訂版本的全文索引文檔之中。否則,如果為每個修訂版本快照中的文件建立統一、集中獨立的索引文檔,雖然方便了版本限定的檢索方式,但會導致大量的索引數據冗余和系統運行的性能負擔。因此,提供版本限定的SVN全文檢索功能,雖可方便用戶使用,增強系統檢索能力,但卻具有一定的挑戰。

據此,基于Lucene全文索引引擎,結合SVN版本化數據機制,本文提出了一種高性能的SVN全文索引方法,實現SVN文件庫的全文檢索,支持版本限定的SVN全文檢索機制,提升SVN文檔資源的檢索效率。

1 系統體系結構

SVN全文索引檢索機制通常不考慮SVN版本限定問題,即在版本庫中全體修訂版本、全部文檔集中進行檢索。限定修訂版本號碼的SVN全文索引檢索機制,即用戶在檢索時給定SVN的修訂版本號,作為檢索條件,進行檢索結果限定。具體包括兩種修訂檢索限定機制:

(1) 僅在SVN文件庫中該特定修訂版本快照中的全體文件范圍中進行全文檢索,而不是版本庫中全部修訂版本中的所有文檔集中進行檢索。

(2) 僅在該特定修訂版本與其前一修訂版本相比發生變更的文檔集中進行全文檢索,而不是在該特定修訂版本快照的全體文檔集中進行檢索。

SVN每一修訂版本邏輯上包含版本化數據的全部文檔,包括發生變更的文檔和未發生變更的文檔,但通常各修訂版本中僅有少量部分的文檔發生變更。針對每一修訂版本,需對發生變更的文檔建立全文索引,實現版本數據的增量化索引,其不僅降低索引文件占用的空間,而且提升版本庫全文索引的建立時間和全文檢索的性能。

為了支持修訂限定的版本檢索機制,需要根據針對變更文檔集建立的增量化索引,動態重構該修訂版本整體文檔集對應的索引文檔。本文利用Lucene索引框架的filter機制[6],針對各修訂版本,建立自定義的、持久化并且內存緩存的Lucene filter。該filter運用BitSet從Lucene索引文檔集中標識屬于該修訂版本的索引文檔,實現限定修訂版本號整體文檔索引文件的動態重構。

據此,給出修訂限定的SVN全文檢索系統的總體系統體系結構(圖1)。其中,SVN提交偵測模塊,基于SVN的事件捕獲機制,與SVN版本庫交互,偵測SVN文件庫中文件的新增與更新變化,具體包括SVN的Import和Commit操作。當發現SVN文件庫變化時,啟動SVN變更文檔集提取模塊,調用SVN版本庫的接口方法,從SVN版本庫獲取本版本提交更新的文檔集,并把更新的文檔集傳遞給變更文檔集全文索引模塊。然后調用Lucene的索引機制,對變更文檔集進行全文索引。每個變更文檔的Lucene索引必須包含三個字段:(1) 版本修訂號,用于所索引存貯文檔的修訂版本號;(2) 文件完整路徑,用于存貯所索引文檔在SVN版本庫中的路徑與文件名;(3) 文檔的索引內容,用于對文檔的內容進行索引與存貯。

圖1 修訂限定的SVN全文檢索系統體系結構

當SVN版本庫中的版本變更時,修訂版本過濾器構建模塊獲取發生變更的文檔,構建該修訂版本的Lucene檢索文檔過濾器。該過濾器運用BitSet表達與存貯Lucene索引文檔庫中僅屬于該修訂版本的文檔,用于Lucene檢索引擎對特定修訂版本的索引文檔進行過濾,實現特定修訂限定的文檔檢索,其內部實現算法見2.1節。

SVN全文檢索執行時,可調用修訂版本更新文件過濾器構建模塊。該模塊獲取相鄰兩個修訂版本的檢索過濾器,動態構建兩個版本間發生變更文檔集的過濾器,以支持僅在版本間發生變更的文檔集中進行全文檢索,其內部實現算法見2.2節。

SVN全文索引啟動模塊負責整個系統的初始化啟動。SVN全文檢索執行模塊接受用戶的檢索請求,根據用戶的選擇,獲取相應的版本限定檢索過濾器,訪問Lucene索引與檢索庫,執行用戶要求的全文檢索,全文檢索的結果傳遞給檢索結果顯示模塊。

2 修訂限定檢索算法

修訂限定檢索機制的核心是根據修訂版本的增量化文檔集全文索引,動態構建該修訂版本的整體文檔集或其更新文檔集的Lucene過濾器。

2.1 修訂限定過濾器構建

算法1為修訂版本限定過濾器構建算法。該算法運用遞推思想,基于前一修訂版本的限定過濾器和當前修訂版本中文檔變更情況,構建當前修訂版本的文檔限定過濾器。Lucene過濾器采用BitSet設置索引庫中各文檔是的否應被過濾。算法運行的初始基礎即修訂版本0的文檔檢索過濾器,其BitSet的各位皆設置為false。

算法1修訂版本限定過濾器構建算法

Input:需要構建過濾器的修訂版本號revNo。

Output:revNo版本的修訂限定檢索過濾器。

Begin:

獲取變更文檔的URL數組列表changedDocUrls;

獲取變更文檔的數量changeddocNo=changedDocUrls.size();

獲取修訂版本號revNo-1的過濾器prevBitSet;

獲取prevBitSet的位數preSetSize=prevBitSet.size();

// 設置curBitSet中0…preSetSize位的值

curBitSet=new BitSet(preSetSize+changeddocNo);

for(int i=0;i

//設置curBitSet中變更文檔對應位為false

foreach(url in changedDocUrls){

//于lucene索引庫中查找其path field的值為url的文檔,

//獲得其文檔編號docId;

if(curBitSet.get(docID)) curBitSet.set(docID,false);

}

//設置curBitSet中preSetSize…preSetSize+changeddocNo-1

//位的值

for(int i=preSetSize;i

//返回構建的當前更新版本的過濾器

return curBitSet;

End

該算法首先獲取當前需要構建過濾器的修訂版本號revNo、獲取當前修訂版本與前一修訂版本相比發生變更文檔的url數組列表changedDocUrls,得到發生變更文檔的數量,設為changeddocNo。從修訂版本過濾器存貯體系中獲取所存貯的前一修訂版本的限定過濾器,設為prevBitSet,基于該過濾器遞推構建當前修訂版本過濾器。

然后初始化創建當前修訂版本的過濾器,設為curBitSet。因Lucene索引庫新增加了變更的changeddocNo個文檔,故其長度應為preSetSize+changeddocNo。基于前一修訂版本過濾器prevBitSet設置curBitSet中前preSetSize位的初始值,保持與prevBitSet過濾器中各對應值一致,因版本間大部分文檔未發生變更。針對每個變更文檔的url,查找Lucene索引庫,于索引文檔庫中找到相應索引文檔及其文檔編號docId。 如果在curBitSet中對應位置為true,則表明該文檔屬于前一修訂版本,現在該文檔已發生變更具有新版本,故其不屬于當前版本的文檔集,所以過濾器對應文檔位置設置為false。

最后,針對新變更文檔進行增量化索引存貯,其于限定過濾器curBitSet中的對應位置是preSetSize…preSetSize+changeddocNo-1。該部分文檔全部屬于當前修訂版本的索引文檔,故過濾器中相應各位全設置為true。至此,修訂限定過濾器構造完畢。

2.2 修訂更新文件限定過濾器構建

算法2為修訂版本更新文件限定過濾器構建算法。該算法基于用戶提供的修訂版本號,構建與前一修訂版本相比所發生變更文檔的檢索過濾器。

算法2修訂版本更新文件限定過濾器構建算法

Input:需要構建修訂更新過濾器的修訂版本號revNo。

Output:revNo版本的修訂更新文件限定檢索過濾器。

Begin:

獲取修訂版本號revNo-1的過濾器prevBitSet;

獲取prevBitSet的位數preSetSize=prevBitSet.size();

獲取修訂版本號revNo的過濾器curBitSet;

獲取curBitSet的位數curSetSize=curBitSet.size();

獲取最大修訂版本號的過濾器maxBitSet;

獲取maxBitSet的位數maxSetSize=maxBitSet.size();

//初始生成revNo的更新文檔過濾器updateBitSet

updateBitSet=new BitSet(maxSetSize)

//設置updateBitSet中0…preSetSize-1位的值

for(int i=0;i

//設置updateBitSet中preSetSize…curSetSize-1位的值

for(int i=preSetSize;i

//設置maxBitSet中curSetSize…maxBitSize-1位的值

for(int i=curSetSize;i

//返回構建的修訂版本更新文檔過濾器

return updateBitSet;

End

該算法首先是數據的獲取與讀取,具體包括獲取用戶請求限定的修訂版本號,設為revNo;獲取修訂版本號revNo-1的過濾器prevBitSet,其長度設為preSetSize;獲取修訂版本號revNo的過濾器curBitSet,其長度設為curSetSize;獲取最大修訂版本號的過濾器,設為maxBitSet,其長度設為maxSetSize。maxSetSize代表了Lucene索引庫中所索引文檔的總數。本算法將根據prevBitSet、curBitSet和maxBitSet構建修訂版本的更新文檔過濾器。

然后,初始化生成revNo的更新文檔過濾器,設為updateBitSet,其長度為maxSetSize。Lucene索引庫中前preSetSize個文檔,為revNo修訂版本或更前面修訂版本的文檔,故不是revNo修訂版本的更新文檔,故設置updateBitSet中相應位的值為false。Lucene索引庫中對應于preSetSize…curSetSize位置間的文檔,為revNo修訂版本發生變更的文檔,故設置updateBitSet中相應位的值為true。Lucene索引庫中對應于curSetSize…maxBitSize-1位置間的文檔,是revNo之后修訂版本新增加的索引文檔,不是revNo修訂版本的更新文檔,故設置updateBitSet中相應位的值為false。

最后返回該修訂版本更新文件限定過濾器updateBitSet,供Lucene匹配引擎使用。

3 系統實現

本系統采用B/S架構實現,前臺使用HTML、CSS和JavaScript語言和jQuery、jQuery Easy UI框架,基于AJAX技術調用后臺Java服務,驅動Lucene全文檢索引擎訪問SVN倉庫執行索引與檢索。系統在4 GB內存、AMD CPU 2.1 GHz、Lucene4.7、poi-3.11、Svnkti-1.8.7環境下測試。針對200個、450 MB文件進行測試,建立索引時間66.235秒,索引文件3.7 MB,全文檢索時間0.041秒,系統具有良好的時間執行性能。

本系統實現的關鍵技術包括:

(1) 基于SVNKit的SVN倉庫訪問操作[7]

SVNKit是一款開源的、純 Java的 SVN版本控制系統的二次開發軟件包,提供豐富的API實現SVN倉庫的創建、加載、檢出、提交、更新、版本差異比較、版本文件讀取等系列功能。利用SVNKit的高層API接口SVNClientManager,調用其getDiffClient()方法獲取SVNDiffClient的實例,獲得修訂版本的變更文檔集,并對每一個變更的文檔應用SVNRepository的getFile()方法進行讀取,傳遞給Lucene以實現增量化索引。

(2) Office文檔和PDF文檔內容提取與索引[8]

Lucene自身提供的索引分析器不能有效處理Office文檔和PDF文檔。POI和PDFBox軟件包皆是Apache軟件基金會提供的開源的、純Java的Office文檔、PDF文檔讀寫操作的軟件包,具有強大、完善的Office文檔和PDF文檔讀寫和轉化功能。利用POI和PDFBox提取SVN版本倉庫中的Office文檔和PDF文檔的文本內容流,從而對其實現全文索引。

(3) 基于NLPIR的中文分詞處理[9]

NLPIR是中國科學院計算技術研究所經過多年的研發而成供開發出的一款漢語詞法分析系統。NLPIR主要功能包括中文分詞、命名實體識別、用戶詞典和詞性標注功能。利用NLPIR的分詞功能對SVN倉庫中的文檔的內容進行分詞,同時過濾掉沒有必要進行索引的無意義的詞匯語句,從而減少數據冗余,提高索引與檢索效率。

4 結 語

SVN是一款開源的、廣泛應用的版本控制系統。伴隨SVN文檔庫中文檔資源數量的積累和增加,從中進行資源文件的查找變得困難。Lucene是一個知名的開放源代碼全文檢索引擎。據此,本文提出了一個基于Lucene的SVN全文檢索系統,并針對版本化數據特點,提出了兩種修訂限定的全文檢索方式和實現算法,給出了系統實現的關鍵技術。該系統提供便捷的SVN系統全文檢索功能,同時能夠基于修訂限定檢索的范圍與檢索結果,提升SVN文檔資源的檢索效率。

[1] 高平,周磊.版本控制系統——Subversion技術及其在軟件開發庫的應用[J].航空電子技術,2013(1):24-28.

[2] Liu C,Ye X,Ye E.Source Code Revision History Visualization Tools:Do They Work and What Would it Take to Put Them to Work?[J].IEEE Access,2014,2:404-426.

[3] 崔詩程,李千目,戈峰,等.基于Lucene的全文檢索架構設計[J].南京理工大學學報(自然科學版),2015,39(6):692-697.

[4] WebSVN-Online subversion repository browser[OL].http://www.websvn.info/.

[5] Ben Collins-Sussman,Brian W Fitzpatrick,C Michael Pilato.Version Control with Subversion[M].O’Reilly Media,2008.

[6] 劉妍.Lucene過濾搜索原理及編程實踐研究[J].電腦編程技巧與維護,2015(2):22-23.

[7] 陳燮.基于SVNKIT的大型企業應用系統變更管理[J].計算機光盤軟件與應用,2014(18):100-102.

[8] 孔浩,高琴,姜娜.高校URP中基于POI設計實現數據交換中間件[J].陜西理工學院學報(自然科學版),2013(4):39-42.

[9] 義天鵬,陳啟安.基于Lucene的中文分析器分詞性能比較研究[J].計算機工程,2012(22):279-282.

RESEARCHANDIMPLEMENTATIONOFAREVISION-RESTRICTEDSVNFULL-TEXTRETRIEVALSYSTEM

Ren Hongmin1Li Min2Zhao Yaoqiang3Zhang Jingzhou4

1(DepartmentofComputerScienceandTechnology,ShanghaiMaritimeUniversity,Shanghai200135,China)2(QingdaoWestCoastNewAreaAdministrativeCommittee,Qingdao266555,Shandong,China)3(ShanghaiShenkaiPetroleumEquipmentCo.,Ltd,Shanghai201114,China)4(ShanghaiShangkeInformationTechnologyResearchInstitute,Shanghai201206,China)

Aiming at the problem of data retrieval from SVN version repositories, an SVN full-text retrieval system is developed based on Lucene indexing and search technology. Combining with the characteristics of version control management, two revision-restricted SVN full-text retrieval methods was proposed. Then the system architecture of revision-restricted SVN full-text retrieval system is defined, the essential algorithms and realization mechanisms are described based on Lucence filters. The system provides convenient full-text retrieval function for SVN repositories and improves the SVN document resources search efficiency as well.

Subversion SVN Lucene Full-text retrieval

2017-02-17。上海海事大學高級軟件工程精品課程建設項目(2012YQ15000103)。任洪敏,副教授,主研領域:軟件工程。李敏,碩士。趙要強,高工。張敬周,研究員。

TP311

A

10.3969/j.issn.1000-386x.2017.11.016

主站蜘蛛池模板: 欧美日韩导航| 无码日韩精品91超碰| 久久综合色播五月男人的天堂| 国产va在线观看免费| 久久99热这里只有精品免费看| 国产96在线 | 国产成人h在线观看网站站| 欧美黄网在线| 东京热av无码电影一区二区| 国产剧情一区二区| 欧美三级日韩三级| 在线一级毛片| 日本妇乱子伦视频| 欧美国产综合色视频| 国模私拍一区二区三区| 国产最新无码专区在线| 欧美一区二区三区国产精品| 波多野结衣二区| 国产成人无码久久久久毛片| 国产在线精品香蕉麻豆| 亚洲精品va| 在线99视频| 少妇精品网站| 91丝袜美腿高跟国产极品老师| 国产91无码福利在线| 亚洲日韩精品无码专区97| 成人精品视频一区二区在线| 久久综合色视频| 日韩中文字幕免费在线观看| 欧美日韩精品综合在线一区| 无码一区18禁| 国产精品久久久久久影院| 亚洲一区波多野结衣二区三区| 欧美精品啪啪一区二区三区| 992tv国产人成在线观看| 依依成人精品无v国产| 日韩少妇激情一区二区| 亚洲精品欧美日本中文字幕| 国产高潮流白浆视频| 精品少妇人妻av无码久久| 少妇精品在线| 黄网站欧美内射| 亚洲专区一区二区在线观看| 97青草最新免费精品视频| 国产黄色爱视频| 国产欧美成人不卡视频| 黄色在线不卡| 久久性视频| 免费A级毛片无码免费视频| 91精品专区| 青青草91视频| 91精品国产91久久久久久三级| 亚洲第一极品精品无码| 国产男人天堂| 丁香婷婷激情网| 国产精品美女网站| 9966国产精品视频| 一边摸一边做爽的视频17国产| 欧美精品亚洲日韩a| 先锋资源久久| 99无码中文字幕视频| 国产成人91精品免费网址在线| 日a本亚洲中文在线观看| 国产成人欧美| 亚洲美女一区| 极品国产一区二区三区| 国产精品区视频中文字幕 | 国产大全韩国亚洲一区二区三区| 丰满少妇αⅴ无码区| 国产精品冒白浆免费视频| 欧美色亚洲| 91综合色区亚洲熟妇p| 国产经典免费播放视频| 欧美亚洲一区二区三区在线| 黄色网站在线观看无码| 久久精品丝袜| 日韩一二三区视频精品| 国产精品夜夜嗨视频免费视频| 国产亚洲精久久久久久久91| 日韩毛片免费观看| 四虎影视8848永久精品| 亚洲中文在线看视频一区|