基于lucene本地搜索程序概要设计.docx
《基于lucene本地搜索程序概要设计.docx》由会员分享,可在线阅读,更多相关《基于lucene本地搜索程序概要设计.docx(16页珍藏版)》请在冰点文库上搜索。
基于lucene本地搜索程序概要设计
基于lucene本地搜索程序概要设计
指导老师:
组名:
所属院系:
专业:
班级:
完成日期:
摘要
随着因特网的迅猛发展,搜索引擎提供导航服务己经成为互联网上非常重要的网络服务。
利用Lucene开源全文本搜索技术框架建立全文检索系统,设计实现了索引器、检索器、中文分析器等模块,完成了一个基于Lucene的搜索引擎的应用,改进后的基于Lucene的全文检索系统能更好地支持中文及更准确地提供给户所需要的信息。
关键词:
搜索引擎;网络爬虫;Lucene;Heritrix
ABSTRACT
WiththerapiddevelopmentoftheInternet,thesearchengineprovidesnavigationserviceshavebecomeveryimportantnetworkserviceontheInternet.UsingLuceneopensourcefulltextsearchtechnologyframeworktobuildfull-textretrievalsystem,designedforindexers,Retrievers,ChineseAnalyzermodule,completedanapplicationbasedontheLucenesearchengine,improvedfull-textsearchbasedonLucenesystembettersupportfortheChineseandbeamoreaccurateinformationprovidedtouserneeds
keywords:
searchengine;webcrawler;Lucene;Heritrix
目录
摘要2
ABSTRACT2
前景4
产品介绍5
第1章设计概述6
第2章开发与运行环境7
2.1开发环境的配置7
2.2运行环境的配置7
2.3需求概述8
第三章总体设计9
3.1软件描述9
3.2处理流程9
3.2.1文档搜索处理流程9
3.2.2多媒体及图像搜索处理流程10
3.3功能结构设计10
3.3.1搜索文件格式筛选功能结构10
3.3.2搜索范围功能结构10
3.4接口设计10
3.4.1本地方法11
3.4.2报告编程错误12
3.4.3异常处理12
3.5数据结构设计12
3.5.1逻辑结构设计12
3.6关键技术13
3.6.1搜索14
3.6.2索引14
3.6.3多级缓存14
第四章界面设计及响应时间15
4.1界面设计15
4.2系统响应16
第五章出错处理设计17
5.1出错输出信息17
5.2出错处理对策17
第六章安全保密设计18
6.1设计原则18
6.2安全保密方案设计的总体框架19
6.3安全保密方案设计步骤19
6.4初级阶段的安全控制计划20
6.5开发阶段的安全控制设计21
第七章维护设计22
致谢23
参考文献24
前景
随着信息技术不断发展、互联网信息不断丰富,搜索引擎的发展速度也越来越快,目前仅Google收录的网页就超过80亿。
伴随着搜索引擎的飞速发展,相
应的瓶颈问题也开始出现:
索引数据库越来越大,需要的维护成本越来越高;索
引数据源单一,通常只限于文本内容;索引缺乏通用性和灵活性等等。
而Lucene
具有开放性和易扩展性,对于解决搜索引擎目前的问题有很好的应用价值。
本文
通过研究设计并开发实现一个小型简单的基于Lucene的本地搜索引擎,来研究
Lucene在搜索引擎领域的应用前景。
主要工作包括:
(1)分析了本地搜索引擎的组成结构和工作原理,在此基础上进行了基于
Lucene的本地搜索引擎的整体结构设计,并将系统分为网页搜集子系统、索引检
索子系统、查询结果排序子系统等三个模块。
(2)针对各个模块的功能进行了设计开发,设计了相关信息的存储机制,并
根据搜索引擎的工作原理实现了各模块之间的交互。
(3)深入分析并实现了多线程搜集、运用Lucene实现索引和检索、搜索
结果的页面优先度计算等等基于Lucene的本地搜索引擎的关键技术。
产品介绍
1)lucene的索引建立机制不同,在数据库维护的复杂度和性能方面传统本地搜索引擎有很大优势。
2)于Lucene并不是一个完整的搜索引擎,而只是提供索引和搜索功能,可以很方便的嵌入到各种应用中实现对应用的索引/搜索功能,这种特点为制定更
加灵活的搜索、结果排序策略提供了可能,从而为用户提供更加符合其需求的灵活多变的搜索引擎。
3)Lucene是一个开源项目,其排序算法更加透明,搜索结果势必更加客观公正。
本文根据以上Lucene的特点来设计开发一个基于Lucene的小型的搜索引擎,研究Lucene在互联网搜索领域的应用前景。
第1章设计概述
(1)本地文献信息检索是获取知识的捷径。
掌握文献信息检索方法与技能,可以帮助人们快、准、全地获取所需知识,最大限度地节省查找时间,使文献信息得以充分的利用。
(2)本地文献信息检索是科学研究的向导。
要进行有价值的科学研究,必须依赖文献检索,全面获取相关文献信息,及时了解各学科领域出现的新问题、新观点、以确定自己的研究起点和研究目标。
(3)本地文献信息检索是终身教育的基础。
科技的迅速发展使知识的总量呈指数增长,而知识的陈旧速度也明显加快,这就要求人们具有终身教育的能力,这种能力在很大程度上就是获取新知识的能力,就是对新知识的敏感力和接受力,因而必须掌握文献信息检索的方法。
终身学习的需要,是知识创新的需要。
本程序的开发基于lucene的基础进行开发,在对本地文件进行文件名搜索的同时,能够更准确的识别文件内容与所搜索关键词的具体相关性。
第2章开发与运行环境
Windows2000或WindowsXP操作系统,
2.1开发环境的配置
类别
标准配置
最低配置
计算机硬件
基于Intel×86结构的CPU,主频≥2.4GHz
内存≥512M
硬盘至少有200M
基于Intel×86结构的CPU,主频≥1GHz
内存≥256M
硬盘至少有200M
计算机软件
Windows2000或WindowsXP操作系统,
VisioC++6.0
WinPCap3.1以上
Tcl84
Windows2000或WindowsXP操作系统,
VisioC++6.0
WinPCap3.1以上
Tcl83以上
其它
采用MicrosoftSQL2000数据库系统
采用MicrosoftSQL2000数据库系统
2.2需求概述
本地搜索程序的实现,需要lucene作为设计核心。
本地搜索程序的使用,需要用户具备最基础的计算机操作技能,能完成程序的安装,搜索关键词的输入。
第三章总体设计
本地搜索程序的总体思路分析与设计,在整个程序里,除了Lucene的必要操作外,就是IO的基本操作了。
因为要对某目录下及其子目录下的所有Java源文件进行索引,就要用到递归,同时要过滤掉非Java源文件。
根据这种情况,设计了以下5个类:
主类:
索引类(IndexJavaFiles),搜索类(SearchJavaFiles)
异常类:
索引异常类(IndexException),搜索异常类(SearchException)
还有一个文件过滤工厂类(FileFilterFactory)。
3.1软件描述
本程序通过对用户输入的搜索关键词及所选文件类型进行分析,之后进行全盘(分盘)搜索。
关键词搜索范围包括文件名、文件所在文件夹名、文件属性描述。
3.2处理流程
搜索的处理流程主要分为文档类的搜索处理、多媒体类搜索处理、图像文件搜索处理。
3.2.1文档搜索处理流程
3.2.2多媒体及图像搜索处理流程
3.3功能结构设计
为更快的提供搜索响应,需考虑软件的搜索类型筛选,搜索范围选择功能,以便提高搜索效率。
3.3.1搜索文件格式筛选功能结构
此功能多用于搜索多媒体文件的搜索,用户可在输入搜索关键词后进行文件格式选择,极大提高搜索效率。
3.3.2搜索范围功能结构
此功能可用于所有类型的文件搜索,在用户已经确定搜索文件的范围的前提下使用该功能,可手动选择其搜索范围,更快速的进行文件查找。
3.4接口设计
尽管可以完全用Java编写应用程序,但是有时单独用Java不能满足应用程序的需要。
程序员使用JNI来编写Java本地方法,可以处理那些不能完全用Java编写应用程序的情况。
Netscape建议使用Java运行时接口(JRI),它是Java虚拟机所提供服务的通用接口。
JRI的设计融入了可移植性---它几乎没有对底层Java虚拟机的实现细节作任何假设。
JRI提出了各种各样的问题,包括本地方法、调试、反射、嵌入(调用)等等。
对本地方法的加载通过System.loadLibrary方法实现。
下例中,类初始化方法加载了一个与平台有关的本地库,在该本地库中给出了本地方法f的定义:
下面简要分析一下部分已有本地方法接口,例如:
JDK1.0本地方法接口
Netscape的Java运行时接口
Microsoft的原始本地接口和Java/COM接口
JNI接口的组织类似于C++虚拟函数表或COM接口。
使用接口表而不使用硬性编入的函数表的好处是使JNI名字空间与平台相关代码分开。
虚拟机可以很容易地提供多个版本的JNI函数表。
例如,虚拟机可支持以下两个JNI函数表:
一个表对非法参数进行全面检查,适用于调试程序;
另一个表只进行JNI规范所要求的最小程度的检查,因此效率较高。
3.4.1本地方法
对本地方法的加载通过System.loadLibrary方法实现。
下例中,类初始化方法加载了一个与平台有关的本地库,在该本地库中给出了本地方法f的定义:
packagepkg;
classCls{
nativedoublef(inti,Strings);
static{
System.loadLibrary("pkg_Cls");
}
}
JNI允许本地方法访问Java对象的域或调用其方法。
JNI用符号名称和类型签名来识别方法和域。
从名称和签名来定位域或对象的过程可分为两步。
例如,为调用类cls中的f方法,平台相关代码首先要获得方法ID,如下所示:
jmethodIDmid=
env->GetMethodID(cls,"f","(ILjava/lang/String;)D");
然后,平台相关代码可重复使用该方法ID而无须再查找该方法,如下所示:
jdoubleresult=env->CallDoubleMethod(obj,mid,10,str);
域ID或方法ID并不能防止虚拟机卸载生成该ID的类。
该类被卸载之后,该方法ID或域ID亦变成无效。
因此,如果平台相关代码要长时间使用某个方法ID或域ID,则它必须确保:
保留对所涉及类的活引用,或
重新计算该方法ID或域ID。
JNI对域ID和方法ID的内部实现并不施加任何限制。
3.4.2报告编程错误
JNI不检查诸如传递NULL指针或非法参数类型之类的编程错误。
非法的参数类型包括诸如要用Java类对象时却用了普通Java对象这样的错误。
JNI不检查这些编程错误的理由如下:
强迫JNI函数去检查所有可能的错误情况将降低正常(正确)的本地方法的性能。
在许多情况下,没有足够的运行时的类型信息可供这种检查使用。
3.4.3异常处理
可用两种方法来处理平台相关代码中的异常:
本地方法可选择立即返回,使异常在启动该本地方法调用的Java代码中抛出。
平台相关代码可通过调用ExceptionClear()来清除异常,然后执行自己的异常处理代码。
抛出了某个异常之后,平台相关代码必须先清除异常,然后才能进行其它的JNI调用。
当有待定异常时,只有以下这些JNI函数可被安全地调用:
ExceptionOccurred()、ExceptionDescribe()和ExceptionClear()。
ExceptionDescribe()函数将打印有关待定异常的调试消息。
3.5数据结构设计
3.5.1逻辑结构设计
从逻辑结构划分为:
1.表示层;2.业务层;3.数据层
表示层:
主要完成搜索请求的解析以及数据规则处理.对用户输人的请求加以处理。
业务层:
主完成具体搜索业务。
通过链式方式依次传递对请求数据进行处理。
语义分析,分析,结合()I索引和空间索引对目标信息进行索引,搜索结果再通过优化排序,从而获取更佳的信息结果。
数据层:
业务层所有使用到的数据,包括:
词库,地理同库,P()I索引,空间索引等可扩展开放式的多层体系架构优点:
系统部署在服务端.开放的系统架构的设计思想和松散的组件化结构具有垂直和水平方向的易扩展性。
structScriptDistribute{
inttype;
intsubtype;
intssize;
intfilename;
shortintlen;//数据长度
char文件名字;//本地文件的名字
char文件类型;//文件的类型
char文件属性;//文件的属性
char文件夹名字;//文件夹名字
char文件夹类型;//文件夹类型
}
3.6关键技术
影响本地搜索服务的技术因素有很多,下面我们就从搜索,索引,缓存等三个方面进行阐述。
3.6.1搜索
本地搜索是一种介于齐通搜索和空间索引之间的一种搜索方式,
3.6.2索引
索引数据需要满足木地搜索引擎的需要,为搜索引擎提供数据索引支持,索引数据生成在数据生成策略索引数据更新策略、索引数据提供的搜索效率优化、索引数据生成或更新效率优化方面还要进一步的进行设计
第四章界面设计及响应时间
4.1界面设计
(1)软件启动封面设计
在软件界面上面应该醒目的标注制作或支持的公司标志、产品商标,软件名称,版本号,网址,版权声明,序列号等信息,以树立软件形象,方便使用者或购买者在软件启动的时候得到提示。
(2)软件框架设计
软件框架设计应该简洁明了,尽量少用无谓的装饰,应该考虑节省屏幕空间,各种分辨率的大小,缩放时的状态和原则,并且为将来设计的按钮,菜单,标签,滚动条及状态栏预留位置。
(3)软件按钮设计
按钮应具备简洁的图示效果,应能够让使用者产生功能关联反应,群组内按钮应该风格统一,功能差异大的按钮应该有所区别
(4)软件面板设计
软件面板设计应该具有缩放功能,面板应该对功能区间划分清晰,应该和对话框,弹出框等风格匹配,尽量节省空间,切换方便。
(5)菜单设计
菜单设计一般有选中状态和未选中状态,左边应为名称,右边应为快捷键,如果有下级菜单应该有下级箭头符号,不同功能区间应该用线条分割。
(6)标签设计
标签设计应该注意转角部分的变化,状态可参考按钮。
(7)图标设计
图标设计色彩不宜超过64色,大小为16x16、32x32两种,图标设计是方寸艺术,应该加以着重考虑视觉冲击力,它需要在很小的范围表现出软件的内涵,所以很多图标设计师在设计图标时使用简单的颜色,利用眼睛对色彩和网点的空间混合效果,做出了许多精彩图标。
软件图形化界面如下:
软件属性过滤界面如下:
4.2系统响应
系统响应时间应该适中,响应时间过长,用户就会感到不安和沮丧,而响应时间过快也会影响到用户的操作节奏,并可能导致错误。
因此在系统响应时间上坚持如下原则:
2-5秒窗口显示处理信息提示,避免用户误认为没响应而重复操作;
5秒以上显示处理窗口,或显示进度条;一个长时间的处理完成时应给予完成警告信息。
第五章出错处理设计
5.1出错输出信息
用一览表的方式说明每种可能的出错或故障情况出现时,系统输出信息的形式、含意及处理方法
出错
输出信息的形式
含意
处理方法
未能找到数据
找不到数据
无法找到此文件,文件不存在,搜索超时
重新查找
5.2出错处理对策
说明故障出现后可能采取的变通措施,包括:
1.当搜索超时时提示用户重新搜索。
2.当搜索反馈冗余度过大时提示用户进行筛选。
第六章维护设计
当用户以关键词查找信息时,搜索引擎会在硬盘中进行搜寻,如果找到与用户要求内容相符的内容,便采用特殊的算法——通常根据文件中关键词的匹配程度,相关文件夹名称,文件质量等——计算出各网页的相关度及排名等级,然后根据关联度高低,按顺序将这些文件信息返回给用户。
在程序使用期间,开发者会继续对程序进行完善,对算法进行优化,并在修改,测试后向用户提出升级的提醒,并支持用户通过软件本身的升级按钮进行一键升级。
在使用过程中,用户可根据自己所遇到的问题向开发者提出开发建议和优化建议及BUG提交,。
帮助开发者完善程序。
第六章总结
lucene系统非常庞大,分若干分支,每个分支又分若干模块,基于lucene的本地文件搜索程序的开发不可能一个人能完成的任务,它需要精诚合作的团队,大家分工明细,各司其职,相互区别也相互关联。
本次设计使我们有了更好的团队合作意识,也增强了课外知识的收集,学习能力。
本次的实践课程时间是有限的,我们所学到的知识技能也都是有限的,但最重要的是我们通过这次的机会,获得了团队合作的经验,这使我们在今后的工作学习中有了更好的合作能力,更全面的实现终生学习。
最后,感谢我们在本学期有这样的团队合作机会。
(备注:
Lucene和javac的运行结果见doc文档《lucene及javac运行截图》)
致谢
历时将近数周的时间终于将这篇论文写完,在论文的写作过程中遇到了无数的困难和障碍,都在同学和老师的帮助下度过了。
尤其要强烈感谢我的论文指导老师xx老师,他对我们无私的指导和帮助,不厌其烦的帮助进行论文的修改和改进,才使得我们有了论文的成果。
在此向帮助和指导过我的老师,和各位同学表示最衷心的感谢!
感谢这篇论文所涉及到的各位学者。
本文引用了数位学者的研究文献,如果没有各位学者的研究成果的帮助和启发,我们将很难完成本篇论文。
感谢我的同学和朋友,在我写论文的过程中给予我了很多你问素材,还在论文的撰写和排版过程中提供热情的帮助。
由于我们的学术水平有限,所写论文难免有不足之处,恳请各位老师和同学批评和指正。
参考文献
[1]MICHAELB,DORONC.lucene.http:
//lucene.apache.org/java/docs/,2007-6-14/2007-7-20
[2]管建和.基于Lucene全文检索引擎的应用研究和实现[J].计算机工程与设计,2007,
(2)
[3]潘以峰.基于Lucene的网站全文检索系统的开发[J].广西教育学院学报,2006,(5)
[4]
[5]
[6]Lucene_in_Action(中文版)
[7]《Lucene分析与应用》作者:
吴众欣,沈家立 编著出版社:
机械工业出版社