欢迎来到学术参考网

构建基于Lucene的网站站内搜索

发布时间:2015-12-14 14:32

摘 要:随着网络时代的发展,信息极具增加,搜索引擎已经成为人们最基本的应用。同时作为专业网站,实现网站信息的站内搜索已成为方便用户使用,吸引用户的基本要素。Lucene作为优秀的开源全文检索框架,可以很好的实现站内检索。

关键词:Lucene;搜索引擎;站内搜索

1. 引言
  自从有了计算机以后,人类开始用计算机保存信息,有保存就需要查找,于是出现了检索技术。文本检索技术的发展从最初的SMART文档检索系统到AltaVista搜索引擎,到现在的搜索巨头Google,人们习惯在互联网上搜索需要的信息。同时在同一个网站内往往拥有大量的资源,怎样在网站内部使用户能够迅速的找到所需信息,已成为一个网站能够吸引用户的重要方面,建立站内搜索引擎成为必要。使用Lucene实现站内搜索比较与传统的使用数据库查询,使用Google提供的站内搜索存在优势。
2. 国内外现状分析
  在如今的网站建设中,建立站内的全文检索有重要的意义。使用Lucene而不用直接从数据库里搜索记录,主要是基于以下原因:
  (1)性能问题,Lucene是基于文件索引的搜索机制,性能要比数据库里检索更快,特别是数据量大的时候两者区别比较明显。
  (2)目前很多网站,都已经将页面静态化,这种情况下,直接用生成的文件编制索引,再利用Lucene来检索,可以不用查询数据库,减轻了数据库的压力。
  (3)Lucene可以更方便的进行分词,支持多个关键字检查等操作,在实现上要比数据库查询方便。
  虽然大型搜索引擎的功能已经越来越强大了,国内外很多站点都使用了Google的站内检索代替了自己的站内数据库全文检索。但依靠Google这样的大型搜索引擎做站内检索会有以下弊端:
  (1)数量有限:搜索引擎并不会深度遍历一个网站而将网站所有的内容都索引进去,例如Google更容易索引静态网页且是最新更新的。基于Lucene的站内搜索,可以索引所有需要的内容。
  (2)更新慢:搜索引擎针对站点的更新频率也是有一定周期的,很多内容需要一定时间后才能进入GOOGLE的索引。基于Lucene的站内搜索,可以及时更新和删除索引。
  (3)内容不精确:搜索引擎需要通过页面内容提取技术将导航条,页头页尾等内容过滤掉,这种摘要和排重机制是很难实现的。基于Lucene的站内搜索,因为对网站内容添加维护的同时进行索引添加,维护可以保证内容的精确程度。
  (4)无法控制输出:当有更多的输出需求,例如按时间排序,按点击量,按类目过滤等,则不够灵活。基于Lucene的站内搜索,使用Lucene的API可以按照实际需要对结果进行分析,排序。
3. Lucene框架
  Apache Lucene是一个基于Java全文搜索引擎,提供一组解读,过滤,分析文件,编排和使用索引的API。使用Lucene建立站内搜索可以方便用户查找信息,并且基于Lucene的全文检索便于索引添加,维护,搜索,并能对搜索结果进行分析,排序。图1列出了Lucene的系统结构与源码组织图。

  图1 Lucene的系统结构与源码组织图。
  从图中看到,Lucene的系统由基础结构封装、索引核心、对外接口三大部分组成。其中直接操作索引文件的索引核心又是系统的重点。Lucene将所有源码分为了7个模块,并分别放在七个包中,分别是:analysis,document,index,queryParser,search,store,util。以下分四个部分对Lucene框架的使用进行阐述。
  (1)建立索引
  Lucene提供了非常简单的建立索引的方法,只要能将要索引的文件转化为文本格式,Lucene就能为这些文档建立索引,建立索引的过程分为以下三个步骤。
  第一步:将不同的数据源组织成一个Document类型的对象。
  第二步:对要建立索引的数据对象进行分析。
  第三步:按照Lucene的索引格式将数据写入索引文件。
  Lucene提供了五个基础的类来实现这些步骤,分别是Document,Field,IndexWriter,Analyzer,Directory。
  (2)搜索
  建立好索引后,就可以根据索引进行搜索。利用Lucene进行搜索,搜索引擎首先会对搜索的关键词进行解析,然后再在建立好的索引上面进行查找,最终返回和用户输入的关键词相关联的文档。搜索的过程可以通过三个步骤来实现。
  第一步:初始化检索工具IndexSearcher,设置索引存放的路径。
  第二步:构建一个Query对象,对查询关键字进行分析。
  第三步:搜索并处理返回的结果。
  Lucene提供了五个基础的类来完成这个过程,它们分别是Query,Term,TermQuery,IndexSearcher,Hits。
  (3)结果排序与文档评分机制
  对于检索到的结果,需要按一定的顺序返回给用户。因此,需要引入一种机制来对检索结果进行排序,以便更加合理地将结果返回给用户。评分机制就是对检索结果按某种标准进行评估,然后按分值的高低来对结果进行排序。Lucene根据内置算法对文档进行评分,另外Lucene在公式中还加入了加权因子,它可以实现有效地对某个查询或某一域给评分带来的影响施加控制,从而改变某一文档的评分,并最终改变在结果中的排序。
  (4)分词
  对于一个工作良好的搜索引擎来说,分词是必不可少的一个核心模块,只有通过分词才可能让信息检索系统理解用户的检索请求,进而为其搜索相关的内容。此外,分词的质量将直接决定搜索引擎的搜索精度,分词的速度也将影响搜索的速度。Lucene提供了分词器,称为Tokenizer,和过滤器,被称为TokenFilter。但是这些分词器和过滤器都只适用于使用英文26个字母组成的语言。对于中文分词,可以利用Lucene的扩展性,将第三方分词工具集成到Lucene中实现中文分词。
4. 结束语
  随着网站内容的越来越丰富,信息量也越来越大的情况下,访问者想要得到他们的信息,站内搜索的作用就会明显起来。Lucene开源框架提供了全文检索功能,利用中文分词的第三方分词工具,可以很好的实现站内搜索,方便用户使用,体现网站专业性,提高网站竞争力。  
参考文献
. 北京:人民邮电出版社,2007.

上一篇:浅论局域网安全管理

下一篇:计算机网络安全常见攻击与防范