APP下载

基于Lucene索引的数据库全文检索

2014-09-06岳绍敏李万龙光顺利

吉林大学学报(理学版) 2014年5期
关键词:全文检索链表检索

岳绍敏,李万龙,王 璐,光顺利

(长春工业大学 计算机科学与工程学院,长春 130012)

基于Lucene索引的数据库全文检索

岳绍敏,李万龙,王 璐,光顺利

(长春工业大学 计算机科学与工程学院,长春 130012)

针对传统数据库检索中检索速度较慢、 检索结果不完整、 检索结果排列无序等问题,基于全文检索工具Lucene索引的结构,设计一种基于Lucene的数据库索引结构,并提出记录倒排索引链表的概念,使网站不用再按照传统顺序查找方式进行检索,而是以索引库中的关键词进行检索,提高了检索效率. 实验结果表明,基于Lucene的数据库全文检索具有查全率高、 检索结果排列有序等优点.

倒排索引; Lucene索引; 全文检索; 索引结构

随着信息化水平的不断提高及Internet的迅速发展,需要存储的数据越来越多,各大网站的信息量不断增长[1],如具有海量数据的电子商务类网站. 目前针对网站的传统数据库检索技术遇到了诸多问题[2],如检索效率较低、 响应时间过长、 检索结果与用户的查询意图符合度低、 检索结果的信息不完整、 检索结果不能按照用户的查询意图进行排序和无法提高用户搜索体验等.

信息检索指在信息集合中进行查询,找出符合用户需求的信息. 在信息检索技术中,全文检索具有通用性,且最具实用性[3]. 全文检索将用户的查询请求与文本中的每个词进行比较,与数据库检索的字段匹配相比,全文搜索引擎的优点是查询全面而充分,可以给用户最全面、 最广泛的搜索结果[4]; 且全文检索是将用户输入的关键词与索引库内相关信息的索引词进行匹配,与数据库检索的顺序搜索相比,提高了检索效率.

本文借鉴全文搜索工具Lucene的索引结构,设计一种针对数据库信息的倒排索引结构,构建了基于Lucene的数据库全文检索系统(database full-text retrieval system based-Lucene,DFRS). 实验结果表明,DFRS系统显著提高了数据库检索的效率和查全率,可使用户获得更好的搜索体验.

1 Lucene索引

Lucene是一个全文检索引擎工具包,具有开放的源代码,并提供了完整的索引引擎和查询引擎及部分文本分析引擎[5](主要针对英文与德文). Lucene从总体上分为索引功能和检索功能两部分[6]. Lucene的索引引擎可将文本内容切词,并对其建立索引,然后加入索引库. Lucene的查询引擎会按照用户的查询条件进行搜索,并给用户返回相关结果[7]. 与传统全文检索引擎相比,Lucene具有如下特点:

1) Lucene的索引文件格式是自定义的,与应用平台无关,它以8位字节为基础,兼容系统或不同平台的应用可以使用同一索引文件;

2) 基于传统检索引擎的倒排索引,Lucene增加了分块索引功能,可对新的待索引文件建立小索引[8],并通过与已有的索引合并,可对索引文件进行优化,提升检索效率;

3) Lucene具有与语言和文件格式无关的文本分析接口,当创建索引文件时,只要用索引器接收Token流即可完成操作;

4) Lucene拥有已经实现了的查询引擎,用户可直接利用该引擎实现自己的查询功能,并可自己定制查询语法规则,如布尔查询和分组查询等[9].

Lucene索引的结构分为4层,分别为Index层、 Segment层、 Document层和Field层[10]. Lucene索引Index由若干段(Segment)组成,每段由若干文档(Document)组成,每个文档由若干字段(Field)组成,每个字段由若干词元(Term)组成.

由于Lucene索引是按照一定结构组织的,所以查询时不用在原数据源内进行顺序搜索,可直接从索引文件中查找[11],搜索的范围得以降低,因此查询的速度和效率较快.

Lucene的数据源不是某个具体形式,而是一个文档的结构,用户进行索引的源可以有多种形式[12],如html文件、 pdf文件、 字符串或数据库表中的记录等.

2 基于Lucene的数据库全文检索结构

2.1DFRS的结构

图1 基于Lucene的数据库全文检索系统结构Fig.1 Structure of database full-text retrievalsystem based-Lucene

基于Lucene的数据库全文检索系统(DFRS)分为建立索引和查询索引两部分. 建立索引模块周期性地从数据库收集信息,对采集到的信息进行相应的词法、 语法分析,对其建立索引,然后把索引添加到索引库. DFRS可根据用户输入的信息,获取用户的查询条件,并对查询条件进行分析,然后从索引库中进行搜索,最后把相关的查询结果呈现给用户. 基于Lucene的数据库全文检索系统结构如图1所示.

2.2数据库索引的结构

数据库索引结构与Lucene索引结构类似,也分为4层,分别为Index层、 Segment层、 Record层、 Field层. 与其不同的是,数据库索引结构第2层存储的不是文档(Document),而是数据库的记录(Record)信息. Index由若干段(Segment)组成,每段由若干记录(Record)组成,每条记录由若干字段(Field)组成,每个字段由若干词元(Term)组成,词元是最小的索引概念单位.

建立索引时,并不是每个Record都马上添加到同一个索引文件,它们首先被写入到不同的小文件,再合并成一个大索引文件,每个小文件都是一个Segment. 用户提供的源是数据库表中的一条记录,一条记录经过索引后,以一个Record的形式存储在索引文件中. 一个Record可包含多个字段信息,如表中一条记录可包含“姓名”、 “性别”、 “身高”、 “个人简介”等字段,这些字段信息以Field的形式保存在Record中. Term是搜索的最小单位,表示字段内容经过分解后得到的一个词,如字段内容是“张明喜欢唱歌,同时也喜欢跳舞”,分词后得到的Term有“张明”、 “喜欢”、 “唱歌”、 “跳舞”等.

创建数据库索引的步骤:

1) 获取信息源. 按一定周期读取数据库表中的记录,作为创建数据索引的信息源;

2) 信息筛选. 在一条记录中,要存放哪些字段才能达到信息完整且避免垃圾信息,如学生信息,要存储的是学生的“姓名”、 “籍贯”、 “个人简介”等,而“视力”、 “肺活量”等其他信息一般不用存储;

3) 信息分析. 将筛选好的信息进行分词,对中文和英文使用的分词器,一般用标准分词器(StandardAnalyzer)[13];

4) 建立索引库. 把记录写入到索引库,并根据分词器进行分词、 建立索引,索引库可建立到硬盘内,也可建立在内存中;

5) 把记录添加到索引库.

2.3倒排索引

图2 倒排索引结构Fig.2 Structure of inverted index

倒排索引是一种索引方法,被用于存储在全文搜索下某个关键词在一条记录或一组记录中存储位置的映射[14]. 这种索引表中的每项都包含一个属性值和具有该属性值的各记录地址. 由于不是由记录确定属性值,而是由属性值确定记录的位置,因而称为倒排索引. 由于倒排索引通过属性值确定记录的位置,所以检索速度比普通的顺序查询快很多. 此外,不同类型的信息都可存储在倒排链表中,使倒排索引具有较大的灵活性. 倒排索引结构如图2所示. 由图2可见,记录频次(Record Frequency,RF)表示共有多少记录包含此词(Term); 词频率(Frequency)表示该记录中包含了几个该词(Term). 当进行检索时可参考该参数,将更符合用户意图的搜索结果排在前列,可减轻用户的检索负担,并增加用户的搜索体验.

数据库索引以倒排索引的形式存在. 基于Lucene的数据库全文检索系统的索引中,每条记录由若干字段(Field)组成,每个字段由若干词元(Term)组成. 在倒排索引中,不同的Term组成一个词典文件,记录频次(RF)是每个Term在所有记录中出现的次数,指针指向每个Term所对应的位置文件和频率文件. 通过指针,可找到关键词Term在数据库记录中的位置信息和频率信息.

下面用两条数据库记录为例给出创建记录倒排链表的过程:

1) 学生被准许和他们的朋友走出学校玩耍(Record ID: A0001);

2) 我的朋友去学校看望他的学生(Record ID: A0002).

将原始记录进行分词处理,可得到词元(Term): “学生”、 “准许”、 “他们”、 “朋友”、 “走出”、 “学校”、 “玩耍”、 “朋友”、 “学校”、 “学生”、 “看望”. 利用所得到的Term创建一个字典,对字典按照英文字母排序,合并相同词Term成为记录倒排链表,如图3所示.

图3 记录倒排链表示意图Fig.3 Sketch map of record inverted list

例如,对于词(Term)“学校”,共有两条记录包含该词(Term),从而词(Term)后面的记录链表共有两项,第一项表示包含“学校”的第一条记录,即1号记录,该记录中“学校”出现了1次; 第二项表示包含“学校”的第二条记录,即2号记录,此记录中“学校”出现了1次.

2.4基于索引的查询过程

首先获取用户的查询语句,然后对查询语句进行词法分析,提取出单词和关键字,再根据语法规则形成语法树,最后利用搜索索引得到符合语法树的记录.

以语法树“word1 AND word2 NOT word3”为例,搜索索引分为以下几步:

1) 在反向索引表中,分别找出包含word1,word2,word3的记录链表;

2) 对包含word1,word2的链表进行合并操作,得到既包含word1又包含word2的记录链表;

3) 将该链表与word3的记录链表进行差操作,去除包含word3的记录,从而得到既包含word1又包含word2且不包含word3的记录链表,该记录链表就是符合检索条件的记录.

2.5DFRS检索和数据库检索的比较

DFRS将数据库表中的记录通过全文索引建立反向索引(倒排索引); 对于LIKE查询,传统的数据库索引无法使用,需要对数据库的记录逐个遍历,进行GREP式的模糊匹配. 有索引的DFRS检索和数据库检索相比,搜索速度明显提高.

2.5.1 匹配效果 DFRS通过词元(Term)进行匹配,可匹配词序颠倒的记录; 数据库对多个关键词的模糊匹配,可以使用诸如“like %吉林%航空%”的查询语句,但不能匹配词序颠倒的记录,如“xxx航空xxx吉林”.

2.5.2 匹配度 DFRS在对检索结果排序时,参考了关键词的词频率,能将匹配度(相似度)较高的结果排在前面,从而减轻用户的检索负担,并提高用户的搜索体验; 数据库没有匹配度的控制,如分别有记录中“喜欢”这个词出现6次和出现1次的,但是检索结果相同.

2.5.3 结果显示 DFRS通过特别的算法,将显示匹配度最高的前100条结果,检索结果有序排列,且结果集是缓冲式小批量读取的; 数据库的检索结果没有顺序,且会返回所有的结果集,在匹配条目非常多时(如上万条)需要大量的内存存放这些临时结果集.

因此,通过全文索引对数据库中的相应记录都建立倒排索引,可有效提高网站搜索效率.

3 实验结果及分析

DFRS检索和数据库检索采用相同的实验环境: 处理器为Inter Core i3 M 380 @ 2.53 GHz; 内存为4 Gb; 操作系统为Windows 7旗舰版(64位 SP1); Web服务器为Tomcat7.0; 数据库管理系统为MySql; Lucene API为Lucene 3.6版本.

本文实验数据来源于学生学籍管理系统的数据库Student,主要利用DFRS对数据库中BaseInfo表内的数据建立索引,进而利用该索引进行全文检索. BaseInfo表共有16个字段,所用字节数总计为337字节,表的结构列于表1.

表1 BaseInfo表的结构Table 1 Structure of BaseInfo table

本文数据库中BaseInfo表的数据内容是由Java程序随机生成的,为增强实验结果的可靠性,共生成了114 386条记录.

实验分为两步:

1) 输入一个关键词,对不同的记录条数、 数据库检索和DFRS检索分别进行60次检索操作,并记录每次检索结果;

2) 输入多个关键字,分别取关键词的个数为3,6,9,对于不同的关键词个数,数据库检索和DFRS检索分别进行40次检索操作,并记录每次检索的结果.

对实验结果进行统计,将数据库检索和DFRS检索的结果进行对比,结果列于表2.

表2 数据库检索和DFRS检索的比较Table 2 Contrast of database retrieval and DFRS retrieval

由表2可见,DFRS检索与数据库检索相比在查询速度、 查全率及查询结果排序方面都具有较大的优势. 尤其是当连续多次检索同一个关键词时,DFRS可将首次检索结果的ID放到结果集缓存中,从而当再次检索相同的关键词时,可充分利用首次的结果缓存,而不必再次对DFRS的索引库进行检索,能有效提高检索效率.

DFRS检索的查全率较高,当检索条件包含多个关键词时,DFRS系统可将关键词切分出来,并能通过词元(Term)进行匹配,可匹配词序颠倒的记录,把所有相关的信息都搜索出来,并呈现给用户. 而数据库检索不具备对用户查询条件进行切分的功能,它的查全率是0,即无法查出相关信息.

与数据库检索不同,由于DFRS通过倒排索引结构中记录的词频实现匹配度计算,DFRS系统的检索结果可根据用户的查询意图进行排序,以减少用户筛选无用信息的时间,能很好地提高用户的搜索体验,增加用户的满意度. 而数据库检索的结果一般是按照记录在表中的顺序进行排序的,无法体现用户的查询意图,检索结果显得多而杂乱,并会有很多的无用信息,容易使用户产生烦躁的情绪,不利于提高用户的搜索体验.

因此,与数据库检索相比,基于Lucene的数据库全文检索更适用于网站内数据的搜索和查询.

综上所述,传统的数据库检索无法对用户的查询条件进行分析,不可以匹配词序颠倒的记录,检索结果的查全率一般较低,且由于没有相似度计算,使检索结果没有顺序,加长了用户的浏览时间,增加了用户的检索难度; 数据库检索顺序地查找表中记录,使得查找时间较长,一般无法快速满足用户的查找需求. 与传统的数据库检索相比,基于Lucene的数据库全文检索能匹配词序颠倒的数据库记录,有较高的查全率,且具有相似度计算,检索结果可按照用户需求排序,能提高用户检索的效率,同时,它基于特定格式的索引进行查询,可提高检索速度. 基于Lucene的数据库全文检索系统应用广泛,适合于各类网站,检索速度快、 查全率高,比数据库检索有更高的搜索体验,更能满足用户的查询需求.

[1]张俊,李鲁群,周熔. 基于Lucene的搜索引擎的研究与应用 [J]. 计算机技术与发展,2013,23(6): 230-232. (ZHANG Jun,LI Luqun,ZHOU Rong. Research and Application of the Search Engine Based on Lucene [J]. Computer Technology and Development,2013,23(6): 230-232.)

[2]王欢,孙瑞志. 基于领域本体和Lucene的语义检索系统研究 [J]. 计算机应用,2010,30(6): 1655-1657. (WANG Huan,SUN Ruizhi. Research of Semantic Retrieval System Based on Domain-Ontology and Lucene [J]. Journal of Computer Applications,2010,30(6): 1655-1657.)

[3]徐岩,朱恒民. 数据挖掘与数据库的集成方法 [J]. 吉林大学学报: 信息科学版,2007,25(2): 228-232. (XU Yan,ZHU Hengmin. Methods of Integrating Data Mining with Database [J]. Journal of Jilin University: Information Science Edition,2007,25(2): 228-232.)

[4]王修力,马利平. 文本信息检索的代数模型综述 [J]. 吉林大学学报: 信息科学版,2007,25(5): 569-576. (WANG Xiuli,MA Liping. Algebraic Models of Text Retrieval Model: Overview [J]. Journal of Jilin University: Information Science Edition,2007,25(5): 569-576.)

[5]张立岩,吕玲,王井阳. 基于最大熵算法的全文检索研究 [J]. 河北科技大学学报,2009,30(2): 112-115. (ZHANG Liyan,LÜ Ling,WANG Jingyang. Research of Chinese Full Text Information Retrieval System Based on Maximum Entropy Principle [J]. Journal of Hebei University of Science and Technology,2009,30(2): 112-115.)

[6]王茹. 提升全文检索搜索引擎应用问题的研究 [J]. 科技与企业,2012(15): 356. (WANG Ru. Research on Promoting Search Engine Application on Full Text Search [J]. Science Technology and Enterprise,2012(15): 356.)

[7]吴鹏飞,马凤娟,李文革,等. 开源全文检索引擎Lucene本地化实践研究 [J]. 现代图书情报技术,2009(4): 19-22. (WU Pengfei,MA Fengjuan,LI Wenge,et al. Localization of the Open Source Full-Text Retrival Engine Based on Lucene [J]. Modern Books Intelligence Technology,2009(4): 19-22.)

[8]李永春,丁华福. Lucene的全文检索的研究与应用 [J]. 计算机技术与发展,2010,20(2): 12-15. (LI Yongchun,DING Huafu. Research and Application of Full Text Search Based on Lucene [J]. Computer Technology and Development,2010,20(2): 12-15.)

[9]潘以锋. 基于Lucene的网站全文检索系统的开发 [J]. 广西教育学院学报,2006(5): 63-66. (PAN Yifeng. The Development of Full Text Retrieval System Web Site Based on Lucene [J]. Journal of Guangxi Institute of Education,2006(5): 63-66.)

[10]龚磊,武友新. Lucene全文检索系统的研究与实现 [J]. 计算机与数字工程,2010,38(5): 64-67. (GONG Lei,WU Youxin. Research and Realization of Full-Text Retrieval Searth System by Lucene [J]. Computer and Digital Engineering,2010,38(5): 64-67.)

[11]戚学磊. 基于Lucene的站内搜索引擎技术的研究与应用 [D]. 太原: 太原理工大学,2011. (QI Xuelei. Research and Application of the Site Search Engine Technology Based on Lucene [D]. Taiyuan: Taiyuan University of Technology,2011.)

[12]郭晓磊,赵利,聂铁铮. 支持全文检索的XQuery查询处理及优化的研究 [J]. 计算机与数字工程,2010,38(8): 32-34. (GUO Xiaolei,ZHAO Li,NIE Tiezheng. Study on the Query Processing and Optimization of XQuery with Full-Text Search [J]. Computer and Digital Engineering,2010,38(8): 32-34.)

[13]义天鹏,陈启安. 基于Lucene的中文分析器分词性能比较研究 [J]. 计算机工程,2012,38(22): 279-282. (YI Tianpeng,CHEN Qi’an. Comparison Research of Segmentation Performance for Chinese Analyzers Based on Lucene [J]. Compter Engineering,2012,38(22): 279-282.)

[14]郑榕增,林世平. 基于Lucene的中文倒排索引技术的研究 [J]. 计算机技术与发展,2010,20(3): 80-83. (ZHENG Rongzeng,LIN Shiping. Research of Chinese Full Texts Inverted Index Based on Lucene [J]. Computer Technology and Development,2010,20(3): 80-83.)

(责任编辑: 韩 啸)

DatabaseFull-TextRetrievalBasedonLuceneIndex

YUE Shaomin,LI Wanlong,WANG Lu,GUANG Shunli
(CollegeofComputerScienceandEngineering,ChangchunUniversityofTechnology,Changchun130012,China)

The traditional database retrieval has a lot of problems,such as the slower retrieval speed,the incomplete results,and disorderly retrieval results and so on. This paper designs a database index structure based on the Lucene index structure,the full text retrieval tool and puts forward the concept of record inverted index list. So Website can be retrieved by the keywords in the index library,not following the traditional sequential search way,which greatly improves the retrieval efficiency. At the same time,experimental results show that the database full-text retrieval based-Lucene has the advantages of high recall and the orderly retrieval results.

inverted index; Lucene index; full-text retrieval; index structure

2013-12-09.

岳绍敏(1988—),男,汉族,硕士研究生,从事搜索引擎和智能系统的研究,E-mail: shaomin_yue@163.com. 通信作者: 李万龙(1963—),男,汉族,博士,教授,从事软件工程与智能系统的研究,E-mail: lwl@mail.ccut.edu.cn.

吉林省自然科学基金(批准号: 20130101060JC)和吉林省教育厅“十二五”科学技术研究项目(批准号: 2014132; 2014125).

TP39

A

1671-5489(2014)05-0995-06

猜你喜欢

全文检索链表检索
基于二进制链表的粗糙集属性约简
跟麦咭学编程
基于链表多分支路径树的云存储数据完整性验证机制
Oracle数据库全文检索性能研究
专利检索中“语义”的表现
全文检索引擎技术在电子病历中的应用
基于KySou的全文检索系统的分析与优化
链表方式集中器抄表的设计
国际标准检索
国际标准检索