博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Solr搜索引擎第六篇-Solr集成中文分词器IKAnalyzer
阅读量:4163 次
发布时间:2019-05-26

本文共 4748 字,大约阅读时间需要 15 分钟。

文章目录

在一篇中讲述到Lucene如何集成中文分词器IKAnalyzer,这里Solr集成中文分词器IKAnalyzer是在此基础之上的,这里的solr版本为7.5。

第一步:新建java maven工程

pom.xml引入中文分词器IKAnalyzer

com.janeluo
ikanalyzer
2012_u6
org.apache.lucene
lucene-core
org.apache.lucene
lucene-queryparser
org.apache.lucene
lucene-analyzers-common

第二步:定义三个java类

IKAnalyzer4Lucene7:

package com.dalomao.framework.lucene.analizer.ik;import org.apache.lucene.analysis.Analyzer;public class IKAnalyzer4Lucene7 extends Analyzer {
private boolean useSmart = false; public IKAnalyzer4Lucene7() {
this(false); } public IKAnalyzer4Lucene7(boolean useSmart) {
super(); this.useSmart = useSmart; } public boolean isUseSmart() {
return useSmart; } public void setUseSmart(boolean useSmart) {
this.useSmart = useSmart; } @Override protected TokenStreamComponents createComponents(String fieldName) {
IKTokenizer4Lucene7 tk = new IKTokenizer4Lucene7(this.useSmart); return new TokenStreamComponents(tk); }}

IKTokenizer4Lucene7:

package com.dalomao.framework.lucene.analizer.ik;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;import java.io.IOException;public class IKTokenizer4Lucene7 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; /** * @param * @param useSmart */ public IKTokenizer4Lucene7(boolean useSmart) {
super(); offsetAtt = addAttribute(OffsetAttribute.class); termAtt = addAttribute(CharTermAttribute.class); typeAtt = addAttribute(TypeAttribute.class); _IKImplement = new IKSegmenter(input, useSmart); } /* * (non-Javadoc) * * @see org.apache.lucene.analysis.TokenStream#incrementToken() */ @Override public 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.getLexemeTypeString()); // 返会true告知还有下个词元 return true; } // 返会false告知词元输出完毕 return false; } /* * (non-Javadoc) * * @see org.apache.lucene.analysis.Tokenizer#reset(java.io.Reader) */ @Override public void reset() throws IOException {
super.reset(); _IKImplement.reset(input); } @Override public final void end() {
// set final offset int finalOffset = correctOffset(this.endPosition); offsetAtt.setOffset(finalOffset, finalOffset); }}

IKTokenizer4Lucene7Factory:

package com.dalomao.framework.lucene.analizer.ik;import java.util.Map;import org.apache.lucene.analysis.Tokenizer;import org.apache.lucene.analysis.util.TokenizerFactory;import org.apache.lucene.util.AttributeFactory;public class IKTokenizer4Lucene7Factory extends TokenizerFactory{
private boolean useSmart = false; public IKTokenizer4Lucene7Factory(Map
args) {
super(args); String useSmartParm = (String)args.get("useSmart"); if ("true".equalsIgnoreCase(useSmartParm)) this.useSmart = true; } public Tokenizer create(AttributeFactory factory) {
return new IKTokenizer4Lucene7(this.useSmart); }}

第三步:定义三个配置文件

扩展词:lucene_ext.dic

厉害了我的国

停用词:lucene_ext_stopword.dic

,?、我的你

IK配置文件:IKAnalyzer.cfg.xml

IK Analyzer 扩展配置
lucene_ext.dic
lucene_ext_stopword.dic

第四步:打包三个类为jar

将前面定义的三个类达成jar包,命名为IKAnalyzer-lucene7.5.jar。

备注:具体如何打包请参看

第五步:拷贝IKAnalyzer-lucene7.5.jar和ikanalyzer-2012_u6.jar

将这个IKAnalyzer-lucene7.5.jar和 IKAnalyzer的jar(ikanalyzer-2012_u6.jar)拷贝到solr的web应用的lib目录下(solr-7.5.0/server/solr-webapp/webapp/WEB-INF/lib)

第六步:拷贝配置文件

将之前定义的三个配置文件拷贝到solr安装目录的应用classes目录下( solr-7.3.0/server/solr-webapp/webapp/WEB-INF/classes),如果没有classes目录则需要新建

第七步:定义新的FieldType

在内核主目录下conf/managed-schema.xml文件中定义一个新的FieldType,如下:

测试

以上全部步骤做完以后,重启Solr服务器实例,然后登陆web测试

在这里插入图片描述
测试成功!

转载地址:http://sgsxi.baihongyu.com/

你可能感兴趣的文章
手绘VS码绘(一):静态图绘制(码绘使用P5.js)
查看>>
链睿和家乐福合作推出下一代零售业隐私保护技术
查看>>
艾默生纪念谷轮™在空调和制冷领域的百年创新成就
查看>>
JavaSE_day14 集合中的Map集合_键值映射关系
查看>>
异常 Java学习Day_15
查看>>
Mysql初始化的命令
查看>>
浅谈HTML
查看>>
css基础
查看>>
Servlet进阶和JSP基础
查看>>
servlet中的cookie和session
查看>>
过滤器及JSP九大隐式对象
查看>>
【Python】学习笔记——-7.0、面向对象编程
查看>>
【Python】学习笔记——-7.2、访问限制
查看>>
【Python】学习笔记——-7.3、继承和多态
查看>>
【Python】学习笔记——-7.5、实例属性和类属性
查看>>
git中文安装教程
查看>>
虚拟机 CentOS7/RedHat7/OracleLinux7 配置静态IP地址 Ping 物理机和互联网
查看>>
Jackson Tree Model Example
查看>>
常用js收集
查看>>
如何防止sql注入
查看>>