基于Lucene全文检索系统的研究与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于Lucene全文检索系统的研究与实现[摘要] lucene是一个开放源代码的全文检索引擎工具包,利用它可以快速地开发一个全文检索系统。利用lucene开发了一个全文检索系统,通过其特殊的索引结构,实现了传统数据库不擅长的全文索引机制,提供了对非结构化信息的检索能力。
[关键词] lucene 信息检索全文检索索引
一、引言
计算机技术及网络技术的迅速发展,使得internet成为人类有史以来资源最多、品种最全、规模最大的信息资源库。如何在这海量的信息里面快速、全面、准确地查找所需要的资料信息已经成了人们关注的焦点,也成了研究领域内的一个热门课题。这些信息基本上可以分做两类:结构化数据和非结构化数据(如文本文档、word 文档、pdf文档、html文档等)。现有的数据库检索,是以结构化数据为检索的主要目标,实现相对简单。但对于非结构化数据,即全文数据,由于复杂的数据事务操作以及低效的高层接口,导致检索效率低下。随着人们对信息检索的要求也越来越高,而全文检索因为检索速度快、准确性高而日益受到广大用户的欢迎, lucene是一个用java写的全文检索引擎工具包,可以方便地嵌入到各种应用中实现针对应用的全文索引和检索功能。这个开源项目的推出及发展,为任何应用提供了对非结构化信息的检索能力。
二、全文检索策略
通常比较厚的书籍后面常常附关键词索引表(比如,北京:12,34
页,上海:3,77页……),它能够帮助读者比较快地找到相关内容的页码。而数据库索引能够大大提高查询的速度原理也是一样,由于数据库索引不是为全文索引设计的,因此,使用like “%keyword%”时,数据库索引是不起作用的,在使用like查询时,搜索过程又变成类似于一页页翻书的遍历过程了,所以对于含有模糊查询的数据库服务来说,like对性能的危害是极大的。如果是需要对多个关键词进行模糊匹配:like“%keyword1%”and like “%keyword2%”……其效率也就可想而知了。
所以,建立一个高效检索系统的关键是建立一个类似于科技索
引一样的反向索引机制,将数据源(比如多篇文章)排序顺序存储的同时,有另外一个排好序的关键词列表,用于存储关键词==>文章映射关系,利用这样的映射关系索引:[关键词==>出现关键词的文章
编号,出现次数(甚至包括位置:起始偏移量,结束偏移量),出现频率],检索过程就是把模糊查询变成多个可以利用索引的精确查询
的逻辑组合的过程。从而大大提高了多关键词查询的效率,所以,全文检索问题归结到最后是一个排序问题。
三、 lucene全文检索
1.lucene简介
lucene是一个高性能的、可扩展的信息检索工具包。它提供了一套简单却十分强大的核心api,你可以把它融入到应用程序中以增加索引和搜索功能。lucene是一个纯java实现的成熟、自由、开源的软件项目:它是备受程序员欢迎的开源项目组织apache
jakarta的成员项目,基于apache软件许可协议的授权。
2.lucene工作原理
lucene的api接口设计得比较通用,输入输出结构都很像数据库的表一记录一字段,很多传统的应用文件、数据库都可以方便地映射到lucene的存储结构和接口中。lucene的检索本质属于索引检索,即用空间来换取时间,对需要检索的文件、字符流进行全文索引,在检索的时候对索引进行快速的检索,得到检索位置,这个位置记
录检索词出现的文件路径或者某个关键词。
总体上可以认为lucene是一个支持全文索引的数据库系统。
3.lucene系统结构分析
lucene全文检索系统主要有两个功能:一是建立索引库,就是将待索引的数据源经过解析器进行解析,将其内容经切分词后索引入库;二是检索索引库,即根据用户输入的查询条件从索引库中找出
符合条件的文档,将结果通过一定的顺序进行排序返回给用户。
lucene的源码中共包括7个包,每个包完成特定的功能,见表1。其核心类包主要有3个:
org.apache.1ucene.analysis;org.apache.lucene.index;org.ap ache.1ucene.search。
其中,org.apache.1ucene.analysis主要用于切分词,默认的语言为英文,提供德语与俄语的分析器,其他语言可以通过扩展analyzer类来实现。
4.lucene的优势
由于lucene存放的索引信息不是一般数据库,而是文件,这使得lucene访问索引的时间快,同时也使得lucene可以跨平台使用。lucene与大部分的搜索(数据库)引擎不同,不是采用导致索引的更新会需要大量io操作的b树结构来维护索引,而是在扩展索引的时候不断创建新的索引文件,然后定期把这些新的小索引文件合并到原先的大索引中(针对不同的更新策略,批次的大小可以调整,策略可以定制)。这样在不影响检索的效率的前提下,提高了索引的效率。
以上所述,lucene具备源代码开放、跨平台、不限定数据源、易扩展、索引效率高等优点,很适合用来构建全文检索系统。
四、系统设计与实现
本文用lucene为核心开发了全文检索系统。本服务平台核心模块由四部分组成:解析转换器,索引器,检索器,用户界面。
1.解析转换器
分析xml,pdf,html,word等多种格式文件从中提取链接和文件各字段内容以进行索引,每一种格式文本都使用了一个第三方工具来提取文本。其中,用sax api解析xml文档,pdfbox解析pdf, nekohtml解析html,使用poi解析word文档等。
2.索引器
从命令行读取文件名(多个),将文件分路径(path字段)和内容(body字段)2个字段进行存储,并对内容进行全文索引:索引的单位是document对象,每个document对象包含多个字段field对象,针