最近准备开发搜索引擎,而在Java的领域开发搜索引擎,基本都要了解Lucene。Lucene是提供高性能的全文检索包,但不提供完整的搜索功能。本文在这里简单介绍Lucene的基本架构与优点。Luence主要的应用方向是嵌入到各种应用中实现针对应用的全文索引/检索功能。
Luence的优点
为什么在Java语言中开发搜索引擎基本都会提到Lucene呢?说明它必定有很多优秀的地方,根据网上的资料了解到它有以下的优点:
- 索引文件格式独立于应用平台。Lucene定义了一套以8位字节为基础的索引文件格式,使得兼容系统或者不同平台的应用能够共享建立的索引文件。
- 在传统全文检索引擎的倒排索引的基础上,实现了分块索引,能够针对新的文件建立小文件索引,提升索引速度。然后通过与原有索引的合并,达到优化的目的。
- 优秀的面向对象的系统架构,使得对于Lucene扩展的学习难度降低,方便扩充新功能。
- 设计了独立于语言和文件格式的文本分析接口,索引器通过接受Token流完成索引文件的创立,用户扩展新的语言和文件格式,只需要实现文本分析的接口。
- 已经默认实现了一套强大的查询引擎,用户无需自己编写代码即使系统可获得强大的查询能力,Lucene的查询实现中默认实现了布尔操作、模糊查询、分组查询等等。
Luence的基本架构
Luence的组件架构
Luence的常用模块介绍
如下图所示,显示的是Luence5的常见模块,下面对其分别进行介绍
- org.apache.lucene.analysis 主要对文档进行分词,将文档转换成Token,并提供了默认的实现--StandardAnalyzer,默认实现只能对英文进行分词,对中文分词可采取网上开源的分词软件如:IKAnalyzer;
- org.apache.lucene.codecs 提供一个抽象的索引结构,并进行编码与解码;
- org.apache.lucene.document 这里的docment对应对多个字段(Field),而一个字段是关键词组合;
- org.apache.lucene.index 提供创建与操作索引的方法。
- org.apache.lucene.search 对文档进行搜索
- org.apache.lucene.store 提供独立于平台的存储方式,并提供多个实现
- org.apache.lucene.util 提供Luence的常用的工具类