0 Comments

Lucene全文检索引擎

发布于:2013-01-17  |   作者:广州网站建设  |   已聚集:人围观

Lucene是一个开放源代码的全文索引库。经过十多年的发展,Lucene拥有了大量的用户和活跃的开发团队。如果说Google是拥有最多用户访问的搜索引擎网站,那么拥有最多开发人员支持的搜索包也许是Lucene。它最初由Java开发而成,现在有了C#和C++等移植版本。

它的官方网站地址是http://lucene.apache.org/

下面我们结合第1.1节中的代码介绍Lucene中的相关概念。

第一个概念是Index,也就是索引库,在Lucene中并不存在Index的类。通过IndexWriter来写索引,通过IndexReader来读索引。

一段有意义的文字需要通过Analyzer分割成一个个词语后才能按关键词搜索。Analyzer就是分析器,StandardAnalyzer是Lucene中最常用的分析器。为了达到更好的搜索效果,不同的语言可以使用不同的分析器,例如CnAnalyzer就是一个主要处理中文的分析器。

Analyzer返回的结果就是一串Token。Token包含一个代表词本身含义的字符串和该词在文章中相应的起止偏移位置,Token还包含一个用来存储词类型的字符串。

一个Document代表索引库中的一条记录。要搜索的信息封装成Document后通过IndexWriter写入索引库。调用Searcher接口按关键词搜索后,返回的也是一个封装后的Document列表。

一个Document可以包含多个列,叫做field。例如一篇文章可以包含"标题"、"正文"、"修改时间"等field,创建这些列对象以后,可以通过Document的add方法增加这些列。

Term是搜索语法的最小单位,复杂的搜索语法会分解成一个个的Term查询。它表示文档的一个词语,Term由两部分组成:它表示的词语和这个词语所出现的field。

【作者提示】Lucene中的API相对于数据库来说比较灵活,没有类似数据库先定义表结构后使用的过程。如果前后两次写索引时定义的列名称不一样,Lucene会自动创建新的列,所以field的一致性需要我们自己掌握。

标签:
飞机