基于Lucene的全文信息检索技术研究论文_张一弓

基于Lucene的全文信息检索技术研究论文_张一弓

哈工轴承有限公司 黑龙江哈尔滨 150036

摘要:在进行海量数据搜索时,如果使用单纯的数据库技术,那将是非常痛苦的,速度将是极大的瓶颈。使用全文搜索引擎Lucene进行索引、搜索,可以有效的解决速度问题。本文首先对Lucene全文检索检索实现机制做了的介绍,并与传统数据库检索进行比较,体现了Lucene的优越性,接着对Lucene全文检索机制,Lucene索引技术、检索技术、分词技术进行了概述性介绍。

关键词:全文检索;网络爬虫;中文分词;Lucene

1. Lucene全文检索的实现机制

Lucene是Jakarta Apache的开源项目。它是一个用Java写的全文索引引擎工具包,可以方便的嵌入到各种应用中实现针对应用的全文索引/检索功能。Lucene的API接口设计的比较通用,输入输出结构都很像数据库的表=>记录=>字段,所以很多传统的应用的文件、数据库等都可以比较方便的映射到Lucene的存储结构和接口中。

由于数据库索引不是为全文索引设计的,因此,使用like“%keyword%”时,数据库索引是不起作用的,在使用like查询时,搜索过程又变成类似于一页页翻书的遍历过程了,所以对于含有模糊查询的数据库服务来说,LIKE对性能的危害是极大的。所以建立一个高效检索系统的关键是建立一个类似于科技索引一样的反向索引机制,将数据源排序顺序存储的同时,有另外一个排好序的关键词列表,用于存储关键词=>文章映射关系。

Lucene和数据库检索最大的区别在于让前100条记录满足90%以上用户的需要。数据库检索结果仅仅是匹配,不考虑这些数据是否为用户所想所需。Lucene通过大量的映射进行相似度运算,使得相似度最高的记录能够首先提供给用户,依次排序,并过滤掉相似度过于低下的记录。大部分的数据库都是用B树结构维护索引,索引更新时系统开销较大。Lucene虽然也存在类似问题,但相比之下有所改进,Lucene在扩展索引的时候不断创建新的索引文件,最终将这些新的小索引文件并入大索引中。使用Lucene时可以根据不同的要求自行调整批次大小,周期长短。

2. Lucene索引技术

网络爬虫将采集到的信息存放到搜索引擎的本地。为了提高用户的查询精度、系统运行的效率以及空间的利用率,需要对这些信息建立索引。索引器是搜索器和查询器的“桥梁”,其工作主要是建立索引数据库。

目前搜索引擎在建立索引的时候一般采用全文索引,同时采用一些相关的技术,例如过滤无用的词汇,使用元信息,对图像标记的替换文本或者页面中注解建立索引,支持词干的提取等。所谓的全文检索,就是给定一个字符串或者字符串逻辑表达式,对文档库进行相应的检索,查找出与指定表达式相匹配的文档,并将包含这些文字信息的文档作为检索结果返回给用户。

Lucene索引过程分为三个主要操作阶段:将数据转换成文本、分析文本、并将分析过的文本保存到索引库中。首先,Lucene使用各种解析器对各种不同类型的文档进行解析。比如对于HTML文档,HTML解析器会做一些预处理的工作,比如过滤文档中的HTML标签等等。HTML解析器输出的是文本内容,接着Lucene的分词器(Analyzer)从文本内容中提取出索引项以及相关信息,比如索引项的出现频率。然后Lucene的分词器把这些信息写到索引文件中。

3. Lucene索引数据结构

Lucene最核心的特征是通过特殊的索引结构实现了传统数据库不擅长的全文索引机制。Lucene索引由若干段组成,每一段由若干的文档组成,每一个文档由若干的域组成,每一个域由若干的项组成。项是最小的索引概念单位,它直接代表了一个字符串以及其在文件中的位置、出现次数等信息。

期刊文章分类查询,尽在期刊图书馆域是一个关联的元组,由一个域名和一个域值组成,域名是一个字串,域值是一个项,比如将“标题”和实际标题的项组成的域。文档是提取了某个文件中的所有信息之后的结果,这些组成了段,或者称为一个子索引。子索引可以组合为索引,也可以合并为一个新的包含了所有合并项内部元素的子索引。Lucene的索引结构在概念上即为传统的倒排索引结构。

4.中文分词技术

现在信息技术的发展要求用户有选择的阅读和处理海量文本,因此其预备工作---分词系统是很有必要的。分词系统是中文信息处理中的一个主要组成部分,是中文自然语言理解、文献检索、搜索引擎以及文本挖掘系统中的最基本的一部分。为了进行中文信息小型化,需要提取关键知识,也就是说首先要分割出单个的中文词语,然后才能进行词频统计,文本分类以及知识发现等工作,从而得到目标文献中用户需要的信息,那么分词系统就是用来提取中文语句中的中文词语的。

对于中文来说,全文索引首先还要解决一个语言分析的问题,对于英文来说,语句中单词之间是天然通过空格分开的,但亚洲语言的中日韩文语句中的字是一个字挨一个,所以,首先要把语句中按“词”进行索引的话,这个词如何切分出来就是一个很大的问题。

首先,肯定不能用单个字符作为索引单元,否则查“上海”时,不能让含有“海上”也匹配。但一句话:“北京天安门”,计算机如何按照中文的语言习惯进行切分呢?“北京 天安门” 还是“北 京 天安门”?让计算机能够按照语言习惯进行切分,往往需要机器有一个比较丰富的词库才能够比较准确的识别出语句中的单词。另外一个解决的办法是采用自动切分算法:将单词按照2元语法(bigram)方式切分出来,比如:"北京天安门" ==>"北京 京天 天安 安门"。这样,在查询的时候,无论是查询"北京" 还是查询"天安门",将查询词组按同样的规则进行切分:"北京","天安安门",多个关键词之间按与"and"的关系组合,同样能够正确地映射到相应的索引中。这种方式对于其他亚洲语言:韩文,日文都是通用的。

基于自动切分的最大优点是没有词表维护成本,实现简单,缺点是索引效率低,但对于中小型应用来说,基于2元语法的切分还是够用的。基于2元切分后的索引一般大小和源文件差不多,而对于英文,索引文件一般只有原文件的30%-40%不同。

5. Lucene检索技术

搜索引擎的最终目的是为用户进行检索查询。信息检索机制是系统与用户进行交互的接口,应该为用户提供一个非常简单的方法来访问他所关心的信息。为了查询到自己感兴趣的信息,用户必须首先将信息需求转化成一个查询式,这个查询式由一组关键词所组成。信息检索机制根据这些关键词从索引库中获取用户感兴趣的信息,并组织成用户便于使用的方式返回给用户。在搜索引擎设计中信息检索技术直接决定着搜索引擎系统的查准率、查全率和用户欢迎程度。

Lucene类似一个支持全文检索的数据库系统。Lucene的API接口设计类似于数据库的表、记录、字段。这样做的结果是设计思路非常清晰,对数据库的检索也非常高效,绝大部分的数据库检索都可以方便地映射到Lucene的存储结构/接口中。

参考文献

[1]李晓明,闫宏飞,王继民.搜索引擎-原理、技术与系统[M].科学出版社,2004:38-60.

[2]管建和,甘剑峰.基于Lucene全文检索引擎的应用研究与实现 [J].计算机工程,2007,28(2):489-491.

[3]张树瑜,杜国宁,朱仲英.基于Web的半结构化信息抽取技术研究[J].系统工程与电子技术,2004,26(5):610-612.

论文作者:张一弓

论文发表刊物:《基层建设》2019年第12期

论文发表时间:2019/7/17

标签:;  ;  ;  ;  ;  ;  ;  ;  

基于Lucene的全文信息检索技术研究论文_张一弓
下载Doc文档

猜你喜欢