2.2 Lucene开发准备

2.2.1 下载Lucene文件库

首先访问Lucene的官方网站(https://lucene.apache.org/),下载Lucene文件库,其网站页面如图2-3所示。

图2-3 Lucene下载页面

在首页即可看到一绿一红两个下载按钮,单击绿色DOWNLOAD按钮会跳转到Lucene下载页,单击红色DOWNLOAD会跳转到Solr下载页。

这里有必要对Lucene和Solr进行说明,Lucene是一个做全文检索的库,开发者可以拿来根据实际业务需求进行使用,而Solr是一个基于Lucene的全文搜索服务器。Solr是在Lucene的基础上进行扩展,并且提供了更加丰富的查询语言,可扩展性和可配置性比Lucene更高。除此之外Solr还提供了一个完善的管理界面,是一个产品级的全文搜索引擎。

官网首页提供了最新版本的下载链接,访问http://archive.apache.org/dist/lucene/java/,可以下载Lucene所有的发行版本,其页面如图2-4所示。

图2-4 Lucene下载列表

本书基于Lucene 6.0.0版本进行讲解,下拉找到6.0.0文件夹,打开后界面如图2-5所示。

图2-5 Lucene 6.0下载页面

下载列表中的lucene-6.0.0.zip(或者lucene-6.0.0.tgz),下载完成以后不需要任何安装,解压缩即可。如果想阅读和学习Lucene源码,可以下载src版本,即lucene-6.0.0-src.tgz。

2.2.2 工程中引入Lucene

在工程中引入Lucene有两种方式,第一种是传统的手工导入jar包的方法,第二种是使用maven管理。

● 手工导入jar包

以添加Lucene核心模块为例,找到lucene-6.0.0/core/lucene-core-6.0.0.jar,添加到工程中即可。

● 添加maven依赖

到maven仓库(http://mvnrepository.com/)中搜索关键词Lucene,如图2-6所示。获取Lucene模块的maven坐标,添加到maven工程的pom.xml文件中即可。

图2-6 maven仓库中下载Lucene

例如,Lucene核心模块的坐标如下:

        <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-core</artifactId>
            <version>6.0.0</version>
        </dependency>

2.2.3 下载Luke

相信大家非常熟悉关系型数据库,我们把一条条数据存入数据库中,打开数据库管理系统就能看到一条条的数据,非常直观。在全文检索系统中,数据都会被处理成为索引这种数据结构。可以不可以像数据库一样查看存放在索引中的数据呢?当然可以,Luke就是用来查看Lucene、Solr、Elasticsearch索引的GUI工具,方便开发和诊断。Luke的主要功能如下:

● 查看文档和分析字段内容。

● 搜索索引。

● 执行索引维护。

● 从HDFS读取索引。

● 将全部或部分索引转换为XML格式导出。

● 测试自定义的Lucene分词器。

需要说明的是,Luke的版本要和Lucene的版本一致,比如,使用的是6.0版本的Lucene库来创建索引,那么也要使用6.0版本的Luke来查看索引。

Luke是开源工具,代码托管在GitHub之上,项目地址为https://github.com/DmitryKey/luke/releases。在浏览器中打开项目链接,找到Luke 6.0.0,下载luke-6.0.0-luke-release.zip并解压缩。在luke-6.0.0-luke-release目录下可以看到3个文件:luke.bat、luke.sh和target。如果你使用的是Windows操作系统,那么可以直接单击luke.bat来启动Luke;如果你使用的是Linux操作系统,那么可以打开终端,切换到Luke根目录然后运行.luke.sh命令,之后即可成功启动Luke。如果你看到如图2-7所示的界面,说明Luke启动成功。

图2-7 Luke启动界面

2.2.4 下载IK分词工具

IK Analyzer(分词器)是一个开源的、基于Java语言开发的轻量级中文分词工具包。从2006年12月推出1.0版开始,IK Analyzer已经推出了4个大版本。最初它是以开源项目Luence为应用主体的,结合词典分词和文法分析算法的中文分词组件。从3.0版本开始,IK Analyzer发展为面向Java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化实现。在2012版本中,IK Analyzer实现了简单的分词歧义排除算法,标志着IK分词器从单纯的词典分词向模拟语义分词衍化。IK Analyzer 2012有以下特性:

(1)采用了特有的“正向迭代最细粒度切分算法”,支持细粒度和智能分词两种切分模式。

(2)在系统环境:Core2 i7 3.4G双核,4G内存,Window 7 64位,Sun JDK 1.6_29 64位普通PC环境测试,IK 2012具有160万字/秒(3000KB/S)的高速处理能力。

(3)2012版本的智能分词模式支持简单的分词排歧义处理和数量词合并输出。

(4)采用了多子处理器分析模式,支持英文字母、数字、中文词汇等分词处理,兼容韩文、日文字符。

(5)优化的词典存储,更小的内存占用。支持用户词典扩展定义。特别的,在2012版本,词典支持中文、英文、数字混合词语。

以下是IK Analyzer支持细粒度切分和智能切分两种切分方式的演示样例。

文本1:中华人民共和国国歌

智能分词结果:中华人民共和国|国歌|

最细粒度分词结果:中华人民共和国|中华人民|中华|华人|人民共和国|人民|共和国|共和|国|国歌|

文本2:王老师说的确实很有道理

智能分词结果:王老师|说的|确实|很有|道理|

最细粒度分词结果:王老师|老师|师说|说的|的确|的|确实|很有|有道|有|道理|

IK Analyzer下载地址为:https://code.google.com/archive/p/ik-analyzer/downloads,打开链接后,下载最近更新的IK Analyer 2012 upgrade 6源码包,即IK Analyzer 2012_u6_source.rar,解压之后的安装包主要包含下列文件:

● IKAnalyzer中文分词器使用手册

● IKAnalyzer2012.jar(主jar包)

● IKAnalyzer.cfg.xml(分词器扩展配置文件)

● stopword.dic(停止词典)

● LICENSE.TXT, NOTICE.TXT(Apache版权申明)

● DOC文件夹(API说明文档)

IK Analyzer的安装部署十分简单,主要有以下两步:

步骤01 把IKAnalyzer2012.jar部署于项目的lib目录中。

步骤02 把IKAnalyzer.cfg.xml与stopword.dic文件放置在class根目录(对于Web项目,通常是WEB-INF/classes目录,同hibernate、log4j等配置文件相同)下即可。

开发之前下载好Lucene 6.0.0、Luke 6.0.0和IK Analyzer 2012,准备工作就完成了。

2.2.5 工程搭建

本章关于Lucene的案例代码都放在一个Java工程中,工程目录结构如图2-8所示。

图2-8 LuceneDemo工程目录

indexdir文件夹用于存放Lucene索引,lib文件夹用于存放jar包,src目录下有3个包用来存放Java类。tup.lucene.analyzer目录下的IkVSSmartcn.java用于对比IK分词器和Lucene自带的中文智能分词器,StdAnalyzer.java用于测试标准分词器,VariousAnalyzers.java用于测试多种分词器;tup.lucene.ik目录下的IKTokenizer6x.java和IKAnalyzer6x.java用于配置IK分词器;tup.lucene.index目录下的CreateIndex.java用来创建索引;tup.lucene.queries目录下的QueryIndex.java用于查询索引。

读者可以按照图2-8所示的目录结构新建空白Java Project并构建好工程目录,Java类可以随着后面的学习逐步添加。需要添加Lucene的jar包如表2-1所示,在我们准备好的Lucene安装包和IK Analyzer安装包中按照表中的路径找到并拷贝到lib文件夹下即可。

表2-1 jar包位置对照表