一种svn全文检索系统及检索方法
【专利摘要】本发明公开了一种SVN全文检索系统及检索方法,SVN版本库;提交侦测模块,其与SVN版本库交互;变更文档抽取模块,其与提交侦测模块、SVN版本库相连;变更文档索引模块,其分别与变更文档抽取模块及Lucene索引检索库相连;版本过滤器构建模块,其与变更文档抽取模块相连;修订版本过滤器存贮模块,其与版本过滤器构建模块相连;修订版本更新文件过滤器构建模块,其与修订版本过滤器存贮模块相连;全文索引启动模块,其与提交侦测模块及修订版本过滤器存贮模块相连;全文检索执行模块,其与修订版本过滤器存贮模块、修订版本更新文件过滤器构建模块及Lucene索引检索库相连。本发明能够实现Subversion文件库的全文检索,提升Subversion文件库中文档资源发现与定位的效率。
【专利说明】—种SVN全文检索系统及检索方法
【技术领域】
[0001]本发明涉及开发工具与环境、软件配置管理与文档资源管理的【技术领域】,特别涉及SVN全文检索系统及检索方法。
【背景技术】
[0002]Subvers1n(简称SVN)是一款主流的、开源的版本控制系统。Subvers1n允许用户在各自的空间修改和管理同一组数据,记录数据修改情况,并可以籍此将数据恢复到以前的版本与查看数据的修改细节。Subvers1n促进开发团队协作,实现版本控制管理,具有强大的功能和广泛的应用,但Subvers1n与其客户端软件如WebSVN、TortoiseSVN等并不提供Subvers1n文件库的全文检索功能。当用户需要某个文档资料但不知其具体的存储位置与版本时,用户只能逐个修订版本、逐个文件路径采用手动的方式浏览寻找。伴随Subvers1n文档库中文档资源的数量和修订版本号码的增加,通过手动的方式找出所需要文档资料的难度大大增加,查找资料浪费的时间大大增加。
[0003]Lucene是一个知名的开放源代码全文检索引擎,但Lucene并不支持版本化数据的全文索引和索引文档的版本化管理。同时,Subvers1n采用全局修订版本号,文档库的各修订版本间通常存在大量相同的文档和少量发生变更的文档。因此,针对Subvers1n的文档版本管理机制与修订版本的变更情况,需要一种基于Lucene的高性能的Subvers1n文档库全文检索方法,特别是限定特定修订版本号码的检索,包括仅在该修订版本发生变动的文档集中进行全文检索,从而限定检索的范围与检索结果的数量,提升Subvers1n文档资源的检索效率。
【发明内容】
[0004]本发明的目的是提供一种SVN全文检索系统及检索方法,实现Subvers1n文件库的全文检索,提升Subvers1n文件库中文档资源发现与定位的效率。
[0005]为了实现以上目的,本发明是通过以下技术方案实现的:
一种SVN全文检索系统,其特点是,包含:
SVN版本库;
提交侦测模块,其与SVN版本库交互,侦测SVN版本库中文件的新增与更新变化;变更文档抽取模块,其与提交侦测模块、SVN版本库相连,调用SVN版本库的函数指令,从SVN版本库获取本版本提交变更的文档集;
变更文档索引模块,其分别与变更文档抽取模块及Lucene索引检索库相连,所述的变更文档索引模块接收变更文档抽取模块传递过来的变更文档集和发生变更的版本号,对变更文档集进行全文索引;
版本过滤器构建模块,其与变更文档抽取模块相连,当SVN版本库中的版本变更时,所述的版本过滤器构建模块接受变更文档索引模块的调用指令,获取发生变更的文档,并构建Lucene检索文档过滤器; 修订版本过滤器存贮模块,其与版本过滤器构建模块相连;
修订版本更新文件过滤器构建模块,其与修订版本过滤器存贮模块相连,获取修订版本过滤器存贮模块中相邻两个修订版本的检索过滤器;
全文索引启动模块,其与提交侦测模块及修订版本过滤器存贮模块相连;
全文检索执行模块,其与修订版本过滤器存贮模块、修订版本更新文件过滤器构建模块及Lucene索引检索库相连,所述的全文检索执行模块调用修订版本过滤器存贮模块或者修订版本更新文件过滤器构建模块,获取检索过滤器,访问Lucene索引检索库。
[0006]所述的变更文档的索引包含:版本修订号、文件完整路径、文档索引内容。
[0007]该全文检索系统还包含检索显示模块,其与全文检索执行模块相连。
[0008]一种SVN全文检索方法,其特点是,该方法包含如下步骤:
SI,提交侦测模块侦测SVN版本库中文件的新增与更新变化;
S2,变更文档集抽取模块调用SVN版本库的函数指令,从SVN版本库获取本版本提交变更的文档集;
S3,变更文档索引模块接收变更文档抽取模块传递过来的变更文档集和发生变更的版本号,对变更文档集进行全文索引;
S4,版本过滤器构建模块接受变更文档集索引模块的调用指令,获取发生变更的文档,并构建Lucene检索文档过滤器;
S5,修订版本过滤器存贮模块存储管理Lucene检索文档过滤器;
S6,修订版本更新文件过滤器构建模块获取修订版本过滤器存贮模块中相邻两个修订版本的检索过滤器;
S7,全文检索执行模块调用修订版本过滤器存贮模块或者修订版本更新文件过滤器构建模块,获取检索过滤器,访问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]本发明与现有技术相比,具有以下优点:
(I)实现修订版本变更文档的增量化索引,其不仅加快索引速度,降低索引存贮空间,而且可以显著地提升索引的性能。
[0012](2)通过自定义的过滤器,在增量化索引的机制上实现完整修订版本文档索引的构建和变更文档索引的构建,实现仅在特定修订版本或该版本发生变更的文档集中进行全文索引检索,能缩小检索访问,提升检索的精度。
[0013](3)通过一次性构建、持久化存贮和内存缓存的过滤器实现机制,而不是检索时每次遍历Lucene索引库进行过滤器重构的机制,进一步提升了 Subvers1n精确化全文检索的性能。
【专利附图】
【附图说明】
[0014]图1为本发明一种SVN全文检索系统的系统框图;
图2为本发明一种SVN全文检索方法中步骤S4的流程图;
图3为本发明一种SVN全文检索方法中步骤S6的流程图。
【具体实施方式】
[0015]以下结合附图,通过详细说明一个较佳的具体实施例,对本发明做进一步阐述。
[0016]如图1所示,一种SVN全文检索系统,包含:SVN版本库111 ;提交侦测模块101,其基于周期性的轮询方法或者Subvers1n的事件捕获机制,与SVN版本库交互,侦测SVN版本库中文件的新增与更新变化;变更文档抽取模块102,其与提交侦测模块、SVN版本库相连,调用SVN版本库的函数指令,从SVN版本库获取本版本提交变更的文档集;变更文档索引模块103,其分别与变更文档抽取模块102及Lucene索引检索库112相连,变更文档索引模块103接收变更文档抽取模块传递过来的变更文档集和发生变更的版本号,对变更文档集进行全文索引,变更文档的索引包含:版本修订号、文件完整路径、文档索引内容;版本过滤器构建模块104,其与变更文档抽取模块102相连,当SVN版本库中的版本变更时,所述的版本过滤器构建模块接受变更文档集索引模块的调用指令,获取发生变更的文档,并构建Lucene检索文档过滤器,Lucene检索文档过滤器运用BitSet表达与存忙Lucene索引文档库中仅属于该修订版本的文档,用于Lucene检索引擎针对特定修订版本文档的进行过滤,实现特定版本化的文档检索;修订版本过滤器存贮模块105,其与版本过滤器构建模块相连,针对Subvers1n版本库的各个修订版本,实现其相应过滤器BitSet的存贮管理。各修订版本过滤器的存贮管理包括两种存贮机制:一是持久化存贮机制,通过文件、数据库或其它方法于计算机外存存贮过滤器;二是于内存的高速缓存,基于Hash的思想,运用Memcached等技术,实现各修订版本过滤器的高速缓存并供各检索线程共享,用以提升Subvers1n全文检索的性能;修订版本更新文件过滤器构建模块106,其与修订版本过滤器存贮模块相连,获取修订版本过滤器存贮模块中相邻两个修订版本的检索过滤器;全文索引启动模块107,其与提交侦测模块101及修订版本过滤器存贮模块105相连,其为整个系统的初始化启动模块;全文检索执行模块109,其与修订版本过滤器存贮模块105、修订版本更新文件过滤器构建模块106及Lucene索引检索库112相连,全文检索执行模块109调用修订版本过滤器存贮模块105或者修订版本更新文件过滤器构建模块106,获取检索过滤器,访问Lucene索引检索库,调用Lucene的全文检索引擎;检索显示模块110,其与全文检索执行模块相连,用于显示全文检索的结果。
[0017]全文检索执行模块109输入端还连接有用户检索需求获取模块108,该模块提供前端客户端,通过桌面应用软件或Web应用软件的方式向用户提供全文索引需求填写的界面,用户填写全文检索的关键词,提供限定特定检索范围修订版本号,选择是否仅在该版本变更的文档集中进行检索的选项,并打包用户的检索需求传递给全文检索执行模块109。
[0018]一种SVN全文检索方法,该方法包含如下步骤:
SI,提交侦测模块侦测SVN版本库中文件的新增与更新变化;
S2,变更文档集抽取模块调用SVN版本库的函数指令,从SVN版本库获取本版本提交变更的文档集;
S3,变更文档索引模块接收变更文档抽取模块传递过来的变更文档集和发生变更的版本号,对变更文档集进行全文索引;
S4,版本过滤器构建模块接受变更文档集索引模块的调用指令,获取发生变更的文档,并构建Lucene检索文档过滤器;
S5,修订版本过滤器存贮模块存储管理Lucene检索文档过滤器;
S6,修订版本更新文件过滤器构建模块获取修订版本过滤器存贮模块中相邻两个修订版本的检索过滤器;
S7,全文检索执行模块调用修订版本过滤器存贮模块或者修订版本更新文件过滤器构建模块,获取检索过滤器,访问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过滤器中各对应值一致,因版本间大部分文档未发生变更。;
S4.6,设置过滤器curBitSet中变更文档对应位为false,针对每个变更文档的Url(统一资源定位符),查找Lucene索引库,于索引文档库中找到路径字段值等于该Url的文档及其相应的文档编号docld,如果在过滤器curBitSet中对应位置为true,则表明该文档属于前一修订版本,因为该值来源于步骤4.5中从过滤器prevBitSet设置,现在该文档已发生变更具有新版本,故其不属于当前版本的文档集,所以过滤器对应文档位置设置为false ;
S4.7 设置过滤器 curBitSet 中的 preSetSize 到 preSetSize+changeddocNo-Ι 位的值,针对新变更文档进行增量索引存忙,其于Lucene中存忙的文档编号是PreSetSize^preSetSize+changeddocNo-1,故改部分文档全部属于当前修订版本的索引文档,故过滤器中相应各位全设置为true ;
S4.8,返回构建的当前更新版本的过滤器curBitSet。
[0020]如图3所示,步骤6包含如下步骤:
S6.1,全文检索执行模块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修订版本发生变更的文档,故更新文档过滤器过滤器对应文档位置设置为true ;
S6.8,设置最大修订版本号的过滤器maxBitSet中curSetSize?maxBitSize-Ι位的值,Lucene索引库中curSetSize"maxBitSize_l间的文档,是revNo之后修订版本新增加的索引文档,故不是revNo修订版本的更新文档,故过滤器对应文档位置设置为false ;
S6.9,返回构建的修订版本更新文档过滤器updateBitSet。
[0021]综上所述,本发明一种SVN全文检索系统及检索方法,实现Subvers1n文件库的全文检索,提升Subvers1n文件库中文档资源发现与定位的效率。
[0022]尽管本发明的内容已经通过上述优选实施例作了详细介绍,但应当认识到上述的描述不应被认为是对本发明的限制。在本领域技术人员阅读了上述内容后,对于本发明的多种修改和替代都将是显而易见的。因此,本发明的保护范围应由所附的权利要求来限定。
【权利要求】
1.一种SVN全文检索系统,其特征在于,包含: SVN版本库; 提交侦测模块,其与SVN版本库交互,侦测SVN版本库中文件的新增与更新变化;变更文档抽取模块,其与提交侦测模块、SVN版本库相连,调用SVN版本库的函数指令,从SVN版本库获取本版本提交变更的文档集; 变更文档索引模块,其分别与变更文档抽取模块及Lucene索引检索库相连,所述的变更文档索引模块接收变更文档抽取模块传递过来的变更文档集和发生变更的版本号,对变更文档集进行全文索引; 版本过滤器构建模块,其与变更文档抽取模块相连,当SVN版本库中的版本变更时,所述的版本过滤器构建模块接受变更文档索引模块的调用指令,获取发生变更的文档,并构建Lucene检索文档过滤器; 修订版本过滤器存贮模块,其与版本过滤器构建模块相连; 修订版本更新文件过滤器构建模块,其与修订版本过滤器存贮模块相连,获取修订版本过滤器存贮模块中相邻两个修订版本的检索过滤器; 全文索引启动模块,其与提交侦测模块及修订版本过滤器存贮模块相连; 全文检索执行模块,其与修订版本过滤器存贮模块、修订版本更新文件过滤器构建模块及Lucene索引检索库相连,所述的全文检索执行模块调用修订版本过滤器存贮模块或者修订版本更新文件过滤器构建模块,获取检索过滤器,访问Lucene索引检索库。
2.如权利要求1所述的SVN全文检索系统,其特征在于,所述的变更文档的索引包含:版本修订号、文件完整路径、文档索引内容。
3.如权利要求1所述的SVN全文检索系统,其特征在于,还包含检索显示模块,其与全文检索执行模块相连。
4.一种SVN全文检索方法,其特征在于,该方法包含如下步骤: SI,提交侦测模块侦测SVN版本库中文件的新增与更新变化; S2,变更文档集抽取模块调用SVN版本库的函数指令,从SVN版本库获取本版本提交变更的文档集; S3,变更文档索引模块接收变更文档抽取模块传递过来的变更文档集和发生变更的版本号,对变更文档集进行全文索引; S4,版本过滤器构建模块接受变更文档集索引模块的调用指令,获取发生变更的文档,并构建Lucene检索文档过滤器; S5,修订版本过滤器存贮模块存储管理Lucene检索文档过滤器; S6,修订版本更新文件过滤器构建模块获取修订版本过滤器存贮模块中相邻两个修订版本的检索过滤器; S7,全文检索执行模块调用修订版本过滤器存贮模块或者修订版本更新文件过滤器构建模块,获取检索过滤器,访问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日 优先权日:2014年9月5日
【发明者】郜天宇, 任洪敏 申请人:上海海事大学