基于lucene的web工程

上传人:子 文档编号:52055106 上传时间:2018-08-18 格式:PPT 页数:28 大小:777KB
返回 下载 相关 举报
基于lucene的web工程_第1页
第1页 / 共28页
基于lucene的web工程_第2页
第2页 / 共28页
基于lucene的web工程_第3页
第3页 / 共28页
基于lucene的web工程_第4页
第4页 / 共28页
基于lucene的web工程_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《基于lucene的web工程》由会员分享,可在线阅读,更多相关《基于lucene的web工程(28页珍藏版)》请在金锄头文库上搜索。

1、基于lucene的搜索引擎2007/07/01引言n 本文用lucene和Heritrix构建了一个Web 搜索应用程序n Lucene 是基于 Java 的全文信息检索包,它目前是 Apache Jakarta 家族下面的一个开源项目。n Lucene很强大,但是,无论多么强大的搜索引擎工 具,在其后台,都需要一样东西来支援它,那就是网络 爬虫Spider。网络爬虫,又被称为蜘蛛Spider,或是网络 机器人、BOT等,这些都无关紧要,最重要的是要认识 到,由于爬虫的存在,才使得搜索引擎有了丰富的资源 。n Heritrix是一个纯由Java开发的、开源的Web网络爬 虫,用户可以使用它从网

2、络上抓取想要的资源。它来自 于www.archive.org。Heritrix最出色之处在于它的可扩展 性,开发者可以扩展它的各个组件,来实现自己的抓取 逻辑。系统架构 在前端流程中,用户在搜索引擎提供的界面中输入要搜索的关 键词,这里提到的用户界面一般是一个带有输入框的 Web 页面, 然后应用程序将搜索的关键词解析成搜索引擎可以理解的形式, 并在索引文件上进行搜索操作。在排序后,搜索引擎返回搜索结 果给用户。在后端流程中,网络爬虫从因特网上获取 Web 页面, 然后索引子系统解析这些 Web 页面并存入索引文件中。开发环境n我们开发一个 Web 应用程序利用 Lucene 来检索存放在 文

3、件服务器上的 HTML 文档。在开始之前,需要准备如 下环境:nHeritrix 1.10.0nEclipse 集成开发环境 (Eclipse 3.3+WTP 2.0)nTomcat 6.0 nLucene Library (lucene 2.0+luceneHtmlPaser)nJDK 1.6n 这个工程使用 Eclipse 进行 Web 应用程序的开发, 最终这个 Web 应用程序跑在 Tomcat 6.0 上面。在准备 好开发所必需的环境之后,我们接下来进行 Web 应用程 序的开发。在Eclipse里配置Heritrix的开发环境 nHeritrix在Eclipse中的工程配置好后的截

4、图,以及workspace中文件夹的预览 图 2. Eclipse工程视图下的包结构图 3 .文件夹中的工程n在Eclipse下运行org.archive.crawler.Heritrix类 ,看到了Heritrix成功运行后的WebUI,创建一个新的抓取作务。 n1)单击WebUI菜单栏上的“Jobs”标签,就可以进入任务创建页面。 n2) 设置抓取时的处理链 需要配置的内容共有7项,其中CrawlScope和Frontier是两个最重 要的组件。CrawlScope用于配置当前应该在什么范围内抓取网页链 接。比如,如果选择BroadScope,则表示当前抓取的范围不受限制 ,但如果选择了H

5、ostScope,则表示抓取的范围在当前的Host内。创建一个新的抓取任务 n3) 设置运行时的参数 在设置完处理链后,单击“Settings”链接,就进入了属性设置的页面n 1max-toe-threads该参数的含义很容易了解,它表示Heritrix在运行该抓取任务时,为 任务分配多少个线程进行同步抓取。该参数的默认值为100,而事 实上根据笔者的经验,在机器配置和网络均很好的情况下,设置50 个线程数就已经足够使用了。n2HTTP-Header 在HTTP-Header这个属性域下面,包括两个属性值“user-agent”和 “from”。这两个属性的值如图所示。图 5 运行抓取任务 n

6、当单击“Submit job”链接后,会看到下图所示的页面。图中最上方 很清楚的显示了“Job created”,这表示刚才所设置的抓取任务已经 被成功的建立。同时,在下面的“Pending Jobs”一栏,可以清楚的看 到刚刚被创建的Job,它的状态目前为“Pending”。n回到“Console”界面上,单击面版中的“Start”链接,就会将此时处于 “Pending”状态的抓取任务激活,令其开始抓取 。n刚才还处于“Start”状态的链接已经变为了Hold状态。这表明,抓取 任务已经被激活。 Heritrix的镜象存储结构 n打开Eclipse的workspace目录,进入heritri

7、xProject的工程,里面有一 个jobs目录。进入后,找到以刚才job的名称打头的文件夹,这里面 的内容,就是Heritrix在运行时实时生成的。其中,有一个mirror目 录,进入后,如下图所示:n其实所谓镜象方式存储,就是将URL地址按“/”进行切分,进而按切 分出来的层次存储,比如一个URL地址为:http:/ index.html文件。基于 Lucene 的Web 应用程序n1、创建一个动态 Web 项目n1.在 Eclipse 里面,选择 File New Project,然后再弹出的窗口中选择动 态 Web 项目,n2.在创建好动态 Web 项目之后,你会看到创建好的项目的结构

8、,如下图所示,项目的名称为 sample.dw.paper.lucene。 2. 设计 Web 项目的架构n在我们的设计中,把该系统分成如下四个子系统:n用户接口: 这个子系统提供用户界面使用户可以向 Web 应用程序服 务器提交搜索请求,然后搜索结果通过用户接口来显示出来。我们 用一个名为 search.jsp 的页面来实现该子系统。 n请求管理器: 这个子系统管理从客户端发送过来的搜索请求并把搜 索请求分发到搜索子系统中。最后搜索结果从搜索子系统返回并最 终发送到用户接口子系统。我们使用一个 Servlet 来实现这个子系 统。 n搜索子系统: 这个子系统负责在索引文件上进行搜索并把搜索结

9、构 传递给请求管理器。我们使用 Lucene 提供的 API 来实现该子系统 。 n索引子系统: 这个子系统用来为 HTML 页面来创建索引。我们使用 Lucene 的 API 以及 Lucene 提供的一个 HTML 解析器来创建该子系 统。 n下图显示了我们设计的详细信息,我们将用户接口子系统放到 webContent 目录下面。你会看到一个名为 search.jsp 的页面在这个 文件夹里面。请求管理子系统在包 sample.dw.paper.lucene.servlet 下 面,类 SearchController 负责功能的实现。搜索子系统放在包 sample.dw.paper.lu

10、cene.search 当中,它包含了两个类, SearchManager 和 SearchResultBean,第一个类用来实现搜索功能, 第二个类用来描述搜索结果的结构。索引子系统放在包 sample.dw.paper.lucene.index 当中。类 IndexManager 负责为 HTML 文件创建索引。该子系统利用包 sample.dw.paper.lucene.util 里面的 类 HTMLDocParser 提供的方法 getTitle 和 getContent 来对 HTML 页面进行解析。 3. 子系统的实现n在分析了系统的架构设计之后,我们接下来看系统实现的详细信息 。

11、 n用户接口: 这个子系统有一个名为 search.jsp 的 JSP 文件 来实现,这个 JSP 页面包含两个部分。n第一部分提供了一个用户接口去向 Web 应用程序服务器提交搜索 请求,如图14所示。注意到这里的搜索请求发送到了一个名为 SearchController 的 Servlet 上面。Servlet 的名字和具体实现的类的 对应关系在 web.xml 里面指定。 图14 .向Web服务器提交搜索请求n第二部分负责显示搜索结果给用户2. 请求管理器: 一个名为 SearchController 的 servlet 用来实 现该子系统。图17.给出了这个类的源代码。doPost 方

12、法从客户端获取搜索词并创建类 SearchManager 的一个实例,其 中类 SearchManager 在搜索子系统中进行了定义。然后,SearchManager 的 方法 search 会被调用。最后搜索结果被返回到客户端。 其中toChinese函数 是用来处理中文问题。3.搜索子系统: 在这个子系统中,我们定义了两个类: SearchManager 和 SearchResultBean。第一个类用来实现 搜索功能,第二个类是个JavaBean,用来描述搜索结果 的结构。图18给出了类 SearchManager 的源代码。n注意到在这个类里面有三个私有属性。第一个是 searchWo

13、rd,代表 了 来自客户端的搜索词。第二个是 indexManager,代表了在索引子系 统 中定义的类 IndexManager 的一个实例。第三个是 analyzer,代表了 用 来解析搜索词的解析器。现在我们把注意力放在方法 search 上面。 这 个方法首先检查索引文件是否已经存在,如果已经存在,那么就在 已 经存在的索引上进行检索,如果不存在,那么首先调用类 IndexManager 提供的方法来创建索引,然后在新创建的索引上进行 检 索。搜索结果返回后,这个方法从搜索结果中提取出需要的属性并 为 每个搜索结果生成类 SearchResultBean 的一个实例。最后这些 Sear

14、chResultBean 的实例被放到一个列表里面并返回给请求管理器 。n在类 SearchResultBean 中,含有两个属性,分别是 htmlPath 和 htmlTitle,以及这个两个属性的 get 和 set 方法。这也意味着我们的 搜 索结果包含两个属性:htmlPath 和 htmlTitle,其中 htmlPath 代表了 HTML 文件的路径,htmlTitle 代表了 HTML 文件的标题。4.索引子系统: 类 IndexManager 用来实现这个子系统。 n这个类包含两个私有属性,分别是 dataDir 和 indexDir。dataDir 代 表 存放等待进行索引的

15、 HTML 页面的路径,indexDir 代表了存放 Lucene 索引文件的路径。类 IndexManager 提供了三个方法,分别 是 createIndex, addDocument 和 ifIndexExist。如果索引不存在的话,你 可 以使用方法 createIndex 去创建一个新的索引,用方法 addDocument 去 向一个索引上添加文档。在我们的场景中,一个文档就是一个 HTML 页面。方法 addDocument 会调用由类 HTMLDocParser 提供的方法 对 HTML 文档进行解析。你可以使用最后一个方法 ifIndexExist 来判 断 Lucene 的索引是否已经存在。 nccreateIndex是一个递归遍历文件目录来建立索引的函数。5获取网络路径5在 Tomcat 5.0 上运行应用程序 n输入关键字“中国”然后单击 Search 按钮。然后这个页面上会显示 出搜索结果来 总结n 通过测试,发现lucene对英文检索的 支持还可以,中文检索就还有待提高。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 科普知识

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