昆明理工大学_WEB服务与分布式计算_期末报告_2

上传人:xmg****18 文档编号:119889544 上传时间:2020-01-28 格式:DOC 页数:27 大小:1.01MB
返回 下载 相关 举报
昆明理工大学_WEB服务与分布式计算_期末报告_2_第1页
第1页 / 共27页
昆明理工大学_WEB服务与分布式计算_期末报告_2_第2页
第2页 / 共27页
昆明理工大学_WEB服务与分布式计算_期末报告_2_第3页
第3页 / 共27页
昆明理工大学_WEB服务与分布式计算_期末报告_2_第4页
第4页 / 共27页
昆明理工大学_WEB服务与分布式计算_期末报告_2_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《昆明理工大学_WEB服务与分布式计算_期末报告_2》由会员分享,可在线阅读,更多相关《昆明理工大学_WEB服务与分布式计算_期末报告_2(27页珍藏版)》请在金锄头文库上搜索。

1、.word格式, 课程报告课程名称: WEB 服务与分布计算 设计题目: 基于Lucene全文检索系统 学 院: 信息工程与自动化学院 专 业: 计算机科学与技术 年 级: 2012 级 学生姓名: 邹华宇(201210405204) 指导教师: 王红斌 日 期: 2015年 6月16日 教 务 处 制 期末考查结果评定评分项目分值得分报告条理清晰,内容详实,体会深刻40报告格式符合规范10程序符合要求40界面美观,功能有扩充10评语:成绩:指导教师签字:评定日期: 年 月 日, 专业.专注 .目 录1需求分析4 1.1系统背景介绍4 1.2功能需求分析42 Lucene框架结构分析4 2.1

2、系统功能结构4 2.2系统流程图4 2.3开发及运行环境43Lucene平台搭建44 系统实现105总结12, 专业.专注 .1. 需求分析 1.1 系统背景介绍Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。Lucene是一套用于全文检索和搜寻的开源程式库,由Apache软件基金会

3、支持和提供。Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻。在Java开发环境里Lucene是一个成熟的免费开源工具。作为一个全文搜索引擎,lucene具有以下突出优点:(1)索引文件格式独立于应用平台。Lucene定义了一套以8位字节为基础的索引文件格式,使得兼容系统或者不同平台的应用能够共享建立的索引文件。(2)在传统全文检索引擎的倒排索引的基础上,实现了分块索引,能够针对新的文件建立小文件索引,提升索引速度。然后通过与原有索引的合并,达到优化的目的。(3)优秀的面向对象的系统架构,使得对于Lucene扩展的学习难度降低,方便扩充新功能。(4)设计了独立于语言和文件格

4、式的文本分析接口,索引器通过接受Token流完成索引文件的创立,用户扩展新的语言和文件格式,只需要实现文本分析的接口。(5)内置一套强大的查询引擎,用户无需自己编写代码即使系统可获得强大的查询能力,Lucene的查询实现中默认实现了布尔操作、模糊查询(Fuzzy Search)、分组查询等等。 1.2 功能需求分析本地文献信息检索是获取知识的捷径。掌握文献信息检索方法与技能,可以帮助人们快、准、全地获取所需知识,最大限度地节省查找时间,使文献信息得以充分的利用。本程序的开发基于lucene的基础进行开发,在对本地文件进行文件名搜索的同时,能够更准确的识别文件内容与所搜索关键词的具体相关性。搜索

5、的目的是为了在大量的信息中发现自己感兴趣的信息。但是,当有了足够的资料(比如网页、Word文档、Pdf文档,或数据库中的资料等)之后,并不能立即开始搜索,在此之前,必须先对信息建立索引。所谓全文检索的核心就是索引,索引就是指将原始数据处理成一个高效的交叉引用的查找结构以便于快速的查找。为了快速搜索大量的文本,你必须首先索引那个文本然后把它转化为一个可以让你快速搜索的格式,除去缓慢的顺序地扫描过程。建立索引,就是对待搜索的信息进行一定的分析,并将分析结果按照一定的组织方式存储起来,通常将这些结果存储在文件中。存储分析结果的文件的集合就是索引。在查询时,先从索引中查找,由于索引是按照一定的结构组织

6、的,所以查询的速度非常快。2Lucene框架结构分析 2.1系统功能结构本地搜索程序的实现,需要lucene作为设计核心,lucene只关注文本的索引和搜索,Luncene的架构设计如图:Lucene功能强大,但从根本上说,主要包括两块:文本内容经切词后索引入库和根据查询条件返回结果。 查询逻辑:查询者输入查询条件,条件之间可以通过特定运算符进行运算,比如查询希望查询到与“中国”和“北京”相关的记录,但不希望结果中包括“海淀区中关村”,于是输入条件为“中国+北京-海淀区中关村”; 查询条件被传达到查询分析器中,分析器将将对“中国+北京-海 淀区中关村”进行分析,首先分析器解析字符串的连接符,即

7、这里的加号和减号,然后对每个词进行切词,一般最小的词元是两个汉字,则中国和北京两个词不必再 切分,但对海淀区中关村需要切分,假设根据切词算法,把该词切分为“海淀区”和“中关村”两部分,则最后得到的查询条件可以表示为:“中国” AND “北京” AND NOT(“海淀区” AND “中关村”)。 查询器根据这个条件遍历索引树,得到查询结果,并返回结果集,返回的结果集类似于JDBC中的ResultSet。将返回的结果集显示在查询结果页面,当点击某一条内容时,可以链接到原始网页,也可以打开全文检索库中存储的网页内容。 入库逻辑 :入 库者定义到库中文档的结构,比如需要把网站内容加载到全文检索库,让用

8、户通过“站内检索”搜索到相关的网页内容。入库文档结构与关系型数据库中的表结构类 似,每个入库的文档由多个字段构成,假设这里需要入库的网站内容包括如下字段:文章标题、作者、发布时间、原文链接、正文内容(一般作为网页快照)。包含N个字段的文档(DOCUMENT)在真正入库前需要经过切词(或分词)索引,切词的规则由语言分析器(ANALYZER)完成。切分后的“单词”被注册到索引树上,供查询时用,另外也需要把其它不需要索引的内容入库,所有这些是文件操作均由STORAGE完成。 Lucene倒排索引原理 假设有两篇文章1和2 文章1的内容为:Tom lives in Guangzhou,I live i

9、n Guangzhou too. 文章2的内容为:He once lived in Shanghai. 经过分词处理后 文章1的所有关键词为:tom live guangzhou i live guangzhou 文章2的所有关键词为:he live shanghai 加上“出现频率”和“出现位置”信息后,我们的索引结构为:非结构化数据中所存储的信息是每个文件包含哪些字符串,也即已知文件,欲求字符串相对容易,也即是从文件到字符串的映射。而我们想搜索的信息是哪些文件包含此字符串,也即已知字符串,欲求文件,也即从字符串到文件的映射。两者恰恰相反。于是如果索引总能够保存从字符串到文件的映射,则会大大

10、提高搜索速度。由于从字符串到文件的映射是文件到字符串映射的反向过程,于是保存这种信息的索引称为反向索引。 反向索引的所保存的信息一般如下:假设我的文档集合里面有100篇文档,为了方便表示,我们为文档编号从1到100,得到下面的结构: 左边保存的是一系列字符串,称为词典。每个字符串都指向包含此字符串的文档(Document)链表,此文档链表称为倒排表(Posting List)。有了索引,便使保存的信息和要搜索的信息一致,可以大大加快搜索的速度。2.2系统流程图2.2.1索引创建(Indexing) 全文检索的索引创建过程一般有以下几步:第一步:一些要索引的原文档(Document)。第二步:将

11、原文档传给分词器(Tokenizer)。 分词器(Tokenizer)会做以下几件事情(此过程称为Tokenize): 1.将文档分成一个一个单独的单词。 2.去除标点符号。 3.去除停词所谓停词就是一种语言中最普通的一些单词,由于没有特别的意义,因而大多数 情况下不能成为搜索的关键词,因而创建索引时,这种词会被去掉而减少索引的大小。 英语中停词(Stop word)如:“the”,“a”,“this”等。对于每一种语言的分词组件(Tokenizer),都有一个停词(stop word)集合经过分词(Tokenizer)后得到的结果称为词元(Token).第三步:将得到的词元(Token)传给

12、语言处理组件(Linguistic Processor)。语言处理组件(linguistic processor)主要是对得到的词元(Token)做一些同语言相关的处理。对于英语,语言处理组件(Linguistic Processor)一般做以下几点:1.变为小写(Lowercase)。2.将单词缩减为词根形式,这种操作称为:stemming.3.将单词转变为词根形式,这种操作称为:lemmatization.Stemming 和 lemmatization的异同:相同之处:Stemming和lemmatization都要使词汇成为词根形式。两者的方式不同:Stemming采用的是“缩减”的方

13、式Lemmatization采用的是“转变”的方式.两者的算法不同:Stemming主要是采取某种固定的算法来做这种缩减Lemmatization主要是采用保存某种字典的方式做这种转变。Stemming和lemmatization不是互斥关系,是有交集的.语言处理组件(linguistic processor)的结果称为词(Term).也正是因为有语言处理的步骤,才能使搜索drove,而drive也能被搜索出来。第四步:将得到的词(Term)传给索引组件(Indexer)。索引组件(Indexer)主要做以下几件事情:1. 利用得到的词(Term)创建一个字典。2.对字典按字母顺序进行排序。 2.1.2搜索索引(Search)第一步:用户输入查询语句。查询语句同我们普通的语言一样,也是有一定语法的。不同的查询语句有不同的语法,如SQL语句就有一定的语法。查询语句的语法根据全文检索系统的实现而不同。最基本的有比如:AND, OR, NOT等。举个例子,用户输入语句:lucene AND learned NOT hadoop。说明用户想找一个包含lucene和learned然而不包括hadoop的文档。第二步:对查询语句进行词法分析,语法分析,及语言处理。 1. 词法分析主要用来识别单词和关键字。如上述例子中,经过词法分析,得到单词

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号