基于Lucene的船员在线考试平台的搜索引擎开发
2014-04-29余项树
余项树
摘 要:在项目开发过程中,站内搜索功能是十分重要的。目前常用的全文搜索主要是由各数据库本身提供支持的,但是在数据量较大的中文网站和对于全文搜索使用很频繁的系统中,使用基于Lucene的搜索引擎开发的优势就会变得十分明显。本文结合在线考试平台搜索引擎的开发,研究了搜索引擎中索引的建立和优化、索引目录的查询和对查询结果的展示,以及对查询结果排序的优化。
关键词:Lucene;试题搜索引擎;索引目录;查询分析器;排序算法
中图分类号:TP301 文献标识码:A 文章编号:2095-2163(2014)06-
Abstract: In project development process, it is very important for the site search function. The current commonly full-text searches are mainly provided by the database itself, but in Chinese Web sites with large amount of data and the full-text search system used very frequent, search engine based on Lucene will become the advantage of development. Combined with the online examination platform for search engine development, the paper studies establishment and optimization of index in search engine, indexing catalog query and display the results of a query, therefore optimizes the ranking of query results.
Keyword: Lucene; Item Search Engine; Index Catalog; Query-Analyzer; Sort Algorithm
0 引 言
针对“海员在线考试系统”实际设计开发中试题搜索量大这一重要现象,本文提供了有效解决方案。方案思路为:若采用目前常用的由数据库提供支持的全文搜索势将增加搜索难度。而经研究可知,对于全文搜索具有高频使用需求的系统,若使用基于Lucene[1]的搜索引擎,其研发优势将十分显著明确。本文即选用Lucene.NET开展搜索引擎的技术研究,结果表明全文搜索的效率获得了大幅提升。
1 Lucene与数据库的比较
关于中文的模糊查询,应用最多的即是类似于like "%keyword%"的结构;但是由于数据库在设计过程中引入索引并非为了全文索引,因此在使用like "%keyword%"时,数据库索引将无法启用,为全文检索提供数据也必将不复存在。具体地,当使用like查询时,搜索过程和并未建立索引的数据库查询效率是一样的,即变成了如同一页页翻书、一行一行遍历的过程了,这就使得对于含有模糊查询的数据库服务来说,Like对整个数据库服务性能将产生重大危害,尤其是如果需要同时对多个关键词进行模糊匹配,对于数据库系统而言将引发灾难性后果。综上可知,建立一个科学、高效的检索系统,核心关键即在于确立一个与科技索引相同的反向索引机制,将数据源(对于海员在线考试系统而言,则为试题的题干)实现顺序存储的同时,还要配备另外一个具有清晰顺序的关键词列表,用来存储“关键词==>文章”之间的映射关系,其映射关系结构如下:
[关键词==>出现此关键词的文章,关键词出现的次数(根据查询的逻辑关系,甚至还可以包括更详细的内容如:关键词出现的位置:起始偏移量,结束偏移量),出现频率]
构建了上述映射关系后,索引检索就随之转换成对映射关系的逻辑处理过程,模糊查询也将按照分词而使用户要查询的条件划分为多个可以精确查询的子查询、再进行逻辑组合以获得实现,从而提高了基于多关键词的查询效率。由此可知,全文检索在本质上就是一个排序问题。根据上述分析推得,模糊查询相对数据库的精确查询是一个不确定的问题,这也正是大部分数据库对全文检索仅为有限支持的症结所在[2]。
Lucene的内核技术是其特殊的索引结构,借助其即可实现传统精确查询数据库功能上受限的全文索引机制,而且又提供了丰富的扩展接口,从而便于用户针对不同应用场景的个性定制[3]。在此,综合两者的性能比较则如表1所示。
4查询结果的排序
Lucene缺省是按照本体的相关度算法(score= tf * idf * boost * lengthNorm)进行结果排序的。该排序算法并未考虑到关键词出现位置的权重,例如,出现在标题和在选项部分的权重就是不同的。对于本系统而言,不同章节的重要性则是不同的,而且不同种类的试题重要性也是不同的,但在此算法中却无法呈现,因此本系统对查询结果将可按照用户的要求进行重新排序。
5 线束语
Lucene是一个开放源代码的全文检索引擎工具包,其整体是一个全文检索引擎的架构,并提供了完整的查询引擎、索引引擎和部分文本分析引擎。利用Lucene为软件开发人员提供的工具包进行二次开发,便可以在海员在线考试系统中实现全文检索的功能,从而大大提高全文检索的效率。
参考文献:
[1] 管建和,甘剑峰.基于Lucene全文检索引擎的应用研究与实现[J].计算机工程与设计,2007(2):489-491.
[2]廖继东.基于DotLucene网站全文搜索系统的实现[D].郑州:郑州大学,2007.
[3]刘加发. EBM网络搜索引擎的研究与实现[D].大连:大连海事大学.2008.
[4]刘平冰.基于Lucene的Web站内信息搜索系统[D].成都:电子科技大学,2005.
[5]雷丰云.智能搜索引擎的理论分析与应用研究[D].长沙:中南大学,2007.