##1 pom文件中导入具体jar包
具体pom文件如下:

<dependencies><dependency><groupId>org.apache.lucene</groupId><artifactId>lucene-core</artifactId><version>7.2.0</version></dependency><!--一般分词器,适用于英文分词--><dependency><groupId>org.apache.lucene</groupId><artifactId>lucene-analyzers-common</artifactId><version>7.2.0</version></dependency><!--中文分词器--><dependency><groupId>org.apache.lucene</groupId><artifactId>lucene-analyzers-smartcn</artifactId><version>7.2.0</version></dependency><!--对分词索引查询解析--><dependency><groupId>org.apache.lucene</groupId><artifactId>lucene-queryparser</artifactId><version>7.2.0</version></dependency><!--检索关键字高亮显示--><dependency><groupId>org.apache.lucene</groupId><artifactId>lucene-highlighter</artifactId><version>7.2.0</version></dependency><!-- https://mvnrepository.com/artifact/com.janeluo/ikanalyzer --><dependency><groupId>com.janeluo</groupId><artifactId>ikanalyzer</artifactId><version>2012_u6</version></dependency></dependencies>

##2 引入IK分词器
在工程的resource目录下,新建IK配置文件IKAnalyzer.cfg.xml,配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>  <comment>IK Analyzer 扩展配置</comment><!--用户可以在这里配置自己的扩展字典--> <entry key="ext_dict">ext.dic;</entry> <!--用户可以在这里配置自己的扩展停止词字典--><entry key="ext_stopwords">stopword.dic;ext_stopword.dic</entry>
</properties>

resource目录下,新建配置文件中的ext.dicstopword.dicext_stopword.dic
##3 IK分词器使用
Lucene使用IK分词器需要修改IKAnalyzerIKTokenizer
新建类IKAnalyzer6x继承自IKAnalyzer,代码如下:

package com.fulb.lucene.ik;import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.Tokenizer;/*** @author fulibao* @version 1.0* @created 2018/2/18 下午10:25**/
public class IKAnalyzer6x extends Analyzer {private boolean useSmart;public boolean useSmart() {return useSmart;}public void setUseSmart(boolean useSmart) {this.useSmart = useSmart;}// IK分词器Lucene Analyzer接口实现类;默认细粒度切分算法public IKAnalyzer6x() {this(false);}// IK分词器Lucene Analyzer接口实现类;当为true时,分词器进行智能切分public IKAnalyzer6x(boolean useSmart) {super();this.useSmart = useSmart;}// 重写最新版本的createComponents;重载Analyzer接口,构造分词组件@Overrideprotected TokenStreamComponents createComponents(String fieldName) {Tokenizer _IKTokenizer = new IKTokenizer6x(this.useSmart());return new TokenStreamComponents(_IKTokenizer);}
}

新建类IKTokenizer6x继承自IKTokenizer,代码示例如下:

package com.fulb.lucene.ik;import java.io.IOException;
import org.apache.lucene.analysis.Tokenizer;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import org.apache.lucene.analysis.tokenattributes.OffsetAttribute;
import org.apache.lucene.analysis.tokenattributes.TypeAttribute;
import org.wltea.analyzer.core.IKSegmenter;
import org.wltea.analyzer.core.Lexeme;/*** @author fulibao* @version 1.0* @created 2018/2/18 下午6:25**/
public class IKTokenizer6x extends Tokenizer {// IK分词器实现private IKSegmenter _IKImplement;// 词元文本属性private final CharTermAttribute termAtt;// 词元位移属性private final OffsetAttribute offsetAtt;// 词元分类属性(该属性分类参考org.wltea.analyzer.core.Lexeme中的分类常量)private final TypeAttribute typeAtt;// 记录最后一个词元的结束位置private int endPosition;// Lucene 6.x Tokenizer适配器类构造函数;实现最新的Tokenizer接口public IKTokenizer6x(boolean useSmart) {super();offsetAtt = addAttribute(OffsetAttribute.class);termAtt = addAttribute(CharTermAttribute.class);typeAtt = addAttribute(TypeAttribute.class);_IKImplement = new IKSegmenter(input, useSmart);}@Overridepublic boolean incrementToken() throws IOException {// 清除所有的词元属性clearAttributes();Lexeme nextLexeme = _IKImplement.next();if (nextLexeme != null) {// 将Lexeme转成Attributes// 设置词元文本termAtt.append(nextLexeme.getLexemeText());// 设置词元长度termAtt.setLength(nextLexeme.getLength());// 设置词元位移offsetAtt.setOffset(nextLexeme.getBeginPosition(), nextLexeme.getEndPosition());// 记录分词的最后位置endPosition = nextLexeme.getEndPosition();// 记录词元分类typeAtt.setType(nextLexeme.getLexemeText());// 返会true告知还有下个词元return true;}// 返会false告知词元输出完毕return false;}@Overridepublic void reset() throws IOException {super.reset();_IKImplement.reset(input);}@Overridepublic final void end() {int finalOffset = correctOffset(this.endPosition);offsetAtt.setOffset(finalOffset, finalOffset);}
}

##4 分词器使用代码示例
一段使用Lucene进行分词的代码示例

package com.fulb.lucene.analyzer;import java.io.IOException;
import java.io.StringReader;
import java.nio.file.Paths;import com.fulb.lucene.ik.IKAnalyzer6x;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.cjk.CJKAnalyzer;
import org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer;
import org.apache.lucene.analysis.core.KeywordAnalyzer;
import org.apache.lucene.analysis.core.SimpleAnalyzer;
import org.apache.lucene.analysis.core.StopAnalyzer;
import org.apache.lucene.analysis.core.WhitespaceAnalyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;/*** @author fulibao* @version 1.0* @created 2018/2/18 下午5:47**/
public class VariousAnalyzers {private static String str ="中华人民共和国简称中国,  是一个有13亿人口的国家";public static void main(String[] args) throws IOException {Analyzer analyzer = null;analyzer = new StandardAnalyzer();// 标准分词System.out.println("标准分词:" + analyzer.getClass());printAnalyzer(analyzer);analyzer = new WhitespaceAnalyzer(); // 空格分词System.out.println("空格分词:" + analyzer.getClass());printAnalyzer(analyzer);analyzer = new SimpleAnalyzer(); // 简单分词System.out.println("简单分词:" + analyzer.getClass());printAnalyzer(analyzer);analyzer = new CJKAnalyzer(); // 二分法分词System.out.println("二分法分词:" + analyzer.getClass());printAnalyzer(analyzer);analyzer = new KeywordAnalyzer(); // 关键字分词System.out.println("关键字分词:" + analyzer.getClass());printAnalyzer(analyzer);//        analyzer = new StopAnalyzer(Paths.get(VariousAnalyzers.class.getClassLoader().getResource("stopword.dic").getPath()));analyzer = new StopAnalyzer();// 停用词分词System.out.println("停用词分词:" + analyzer.getClass());printAnalyzer(analyzer);analyzer = new SmartChineseAnalyzer(); // 中文智能分词System.out.println("中文智能分词:" + analyzer.getClass());printAnalyzer(analyzer);analyzer = new IKAnalyzer6x(); // IK分词(细粒度切分算法)System.out.println("IK分词(细粒度切分算法):" + analyzer.getClass());printAnalyzer(analyzer);analyzer = new IKAnalyzer6x(true); // IK分词(智能切分算法)System.out.println("IK分词(智能切分算法):" + analyzer.getClass());printAnalyzer(analyzer);}public static void printAnalyzer(Analyzer analyzer) throws IOException {StringReader reader = new StringReader(str);TokenStream toStream = analyzer.tokenStream(str, reader);toStream.reset();// 清空流CharTermAttribute teAttribute = toStream.getAttribute(CharTermAttribute.class);while (toStream.incrementToken()) {System.out.print(teAttribute.toString() + "|");}System.out.println("\n");analyzer.close();}
}

Lucene开发环境搭建-Maven相关推荐

  1. Spring+Maven+Dubbo+MyBatis+Linner+Handlebars—Web开发环境搭建

    Spring+Maven+Dubbo+MyBatis+Linner+Handlebars                                         --Web开发环境搭建 本文主 ...

  2. Spring + Maven + Dubbo + MyBatis + Linner + Handlebars-Web开发环境搭建

    spring + Maven + Dubbo + MyBatis + Linner + Handlebars                                         - 开发环 ...

  3. Spark Idea Maven 开发环境搭建(转载)

    mark一下,感谢作者分享! Spark Idea Maven 开发环境搭建 一.安装jdk jdk版本最好是1.7以上,设置好环境变量,安装过程,略. 二.安装Maven 我选择的Maven版本是3 ...

  4. JDK安装以及开发环境搭建

    无论是Java开发.J2EE以及Android开发搭建环境时JDK开发环境搭建及环境变量配置是必不可少的,这篇文章就来就分别介绍下JDK的下载以及不同平台的环境变量的配置. 1.安装JDK开发环境 官 ...

  5. 学习笔记Hadoop(十三)—— MapReduce开发入门(1)—— MapReduce开发环境搭建、MapReduce单词计数源码分析

    一.MapReduce MapReduce是Google提出的一个软件架构,用于大规模数据集(大于1TB)的并行运算.概念"Map(映射)"和"Reduce(归纳)&qu ...

  6. Apache Spark1.1.0部署与开发环境搭建 - Mark Lin

    Spark是Apache公司推出的一种基于Hadoop Distributed File System(HDFS)的并行计算架构.与MapReduce不同,Spark并不局限于编写map和reduce ...

  7. eclipse 关闭时progress information弹框_Spring开发环境搭建(Eclipse)

    开发环境搭建,主要包含2部分: Java安装 Eclipse安装 为易于学习,我们只安装这2个部分,对于一般开发学习也足够了.如果你有其他要安装的,酌情添加. Java安装 我们使用Java8: 下载 ...

  8. Jeecg-Boot 快速开发平台,前后端分离—开发环境搭建

    目录索引: 前端开发环境搭建 安装开发工具 导入项目 后端开发环境搭建 安装开发工具 导入项目 第一部分: 前端开发环境搭建 一.安装开发工具 安装nodejs.webstrom.yarn,安装方法参 ...

  9. JEECG_3.7开发环境搭建与代码生成器入门级教程-张代浩-专题视频课程

    JEECG_3.7开发环境搭建与代码生成器入门级教程-3088人已学习 课程介绍         针对入门级同学,清晰讲解JEECG开发平台本地环境搭建步骤,针对jeecg的代码生成器做专题使用讲解, ...

最新文章

  1. 点击按钮显示隐藏的表格
  2. native数据类型 react_react-native中的请求数据
  3. mysql json坑_使用mysql innodb 使用5.7的json类型遇到的坑和解决办法
  4. 《ASP.NET Core 微服务实战》-- 读书笔记(第4章)
  5. CryptoHelper HMAC/X509/RSA/TripleDes/Hash/MD5/SHA1 (Release 3)
  6. 探究foreach对于迭代变量的封装性的研究
  7. 51Nod-1640-天气晴朗的魔法(最小生成树)
  8. Unity VR游戏教程
  9. DNA甲基化经CTCF和黏连蛋白复合体调节RNA可变剪切
  10. mac/macbook触摸板/鼠标/键盘失灵
  11. 网络基础之交换机原理及4大功能
  12. 请不要再轻视Git —— 我在工作中是如何使用 Git 的
  13. 【网络安全学习笔记】
  14. 阿拉伯数字转大写金额(支持简体和繁体)
  15. Youtube 预装到系统后运行报错
  16. 分享130个中国风PPT模板,总有一款适合你
  17. 打击标题党 详述清风算法
  18. SD卡驱动学习(一)
  19. TCP标志位 FIN和RST的区别
  20. ArcGis辅助编号功能的插件式实现

热门文章

  1. [转贴] 网络硬盘“G宝盘”使用体验
  2. Go并发编程(1)-Mutex源码实现
  3. C语言文件操作打开文件关闭文件
  4. 汉语拼音大全_php_sir_新浪博客
  5. Virtualbox - Fatal: Could not read from the boot medium; system halted!终于找到原因了
  6. SSM+Layui汽车出租管理系统
  7. 程序员养生 需从心态、饮食、健身三方面入手
  8. Tableau 超市经典案例之利润分析(二)
  9. YOLOv4: 43mAP/83FPS,虽迟但到,大型调优现场 | 论文速递
  10. Dijkstra单源最短路径算法