热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

lucene6.6+拼音分词+ik分词实现

原来项目使用的是solr进行建立索引与查询,最近想改为lucene。对于最新版的lucene网上的资料没有solr多,并且solr很多功能直接配置就可以使用,但是lucene都要通过api
原来项目使用的是solr进行建立索引与查询,最近想改为lucene。对于最新版的lucene网上的资料没有solr多,并且solr很多功能直接配置就可以使用,但是lucene都要通过api进行封装使用。下面是自己使用lucene6.6+拼音分词和ik中文分词实现的功能:

主要工具包:
lucene6.6相关jar包
pinyinAnalyzer.jar
ik-analyzer-solr6.x.jar
pinyin4j-2.5.0.jar

IKAnalyzer.cfg.xml
mydict.dic
stopword.dic
 
 
lucene的jar包可以通过maven直接构建下载,其他三个包 下载地址。其中ik的分词包是修改过重新打包已适用于6.0以上的solr和lucene版本。
在solr中的拼音分词器是在managed-schema文件中配置的:
	    
		    
			    
			   
		    
		         
			    
			  
		    
	  

在lucene中有自带的中文分词器但是效果一般,使用ik可以自定义自己的分词包dic,分词包直接决定了分词效果的好坏。
自定义一个分词类IndexPinyinAnalyzer继承Analyzer,也可以直接使用pinyinAnalyzer.jar中的PinyinAnalyzer类进行分词,但是他里面使用的mmseg4j中文分词,所以我在这自定义一个analyzer去将他的中文分词替换为ik分词,这部分看一下源码不难理解。
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.Tokenizer;
import org.wltea.analyzer.lucene.IKTokenizer;
import utn.index.mmseg.analysis.PinyinTokenFilter;

/**
 * @author sggq
 * @Date 2017年9月22日
 * @Description 自定义分词Analyzer:ik中文分词+拼音分词
 */
public class IndexPinyinAnalyzer extends Analyzer {
	private boolean userSmart;
	public IndexPinyinAnalyzer(boolean userSmart){
		this.userSmart = userSmart;
	}
	@Override
	protected TokenStreamComponents createComponents(String fieldName) {
		 Tokenizer tokenizer = new IKTokenizer(userSmart);
	     TokenStream tokenStream = new PinyinTokenFilter(tokenizer, true, true, 2);
	     return new Analyzer.TokenStreamComponents(tokenizer, tokenStream);
	}
}
 
 
ik分词源码中通过IKAnalyzer.cfg.xml配置来加载自定义的分词包dic,IKAnalyzer.cfg.xml与mydict.dic和stopword.dic放在项目的src/main/resources下,就可以直接加载。
建立好自己的分词类,在lucene建立索引时就可以直接使用这个analyzer,同时在查询索引时也可以使用这个analyzer。
分词的效果如下:
加载扩展词典:mydict.dic
加载扩展停止词典:stopword.dic
中华人民共和国
zhonghuarenmingongheguo
zhonghuarenmingonghaiguo
zhrmghg
zhonghuarenmingonghuguo
zhonghuarenmingonghuoguo
中华人民
zhrm
zhonghuarenmin
中华
zhonghua
zh
华人
huaren
hr
人民共和国
renmingonghaiguo
renmingonghuoguo
renmingonghuguo
rmghg
renmingongheguo
共和国
gongheguo
ghg
gonghuoguo
gonghaiguo
gonghuguo
共和
gh
gonghai
gonghuo
gonghe
gonghu
国



推荐阅读
  • 本文介绍了解决java开源项目apache commons email简单使用报错的方法,包括使用正确的JAR包和正确的代码配置,以及相关参数的设置。详细介绍了如何使用apache commons email发送邮件。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • 大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记
    本文介绍了大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记,包括outputFormat接口实现类、自定义outputFormat步骤和案例。案例中将包含nty的日志输出到nty.log文件,其他日志输出到other.log文件。同时提供了一些相关网址供参考。 ... [详细]
  • Java如何导入和导出Excel文件的方法和步骤详解
    本文详细介绍了在SpringBoot中使用Java导入和导出Excel文件的方法和步骤,包括添加操作Excel的依赖、自定义注解等。文章还提供了示例代码,并将代码上传至GitHub供访问。 ... [详细]
  • 使用Spring AOP实现切面编程的步骤和注意事项
    本文介绍了使用Spring AOP实现切面编程的步骤和注意事项。首先解释了@EnableAspectJAutoProxy、@Aspect、@Pointcut等注解的作用,并介绍了实现AOP功能的方法。然后详细介绍了创建切面、编写测试代码的过程,并展示了测试结果。接着讲解了关于环绕通知的使用方法,并修改了FirstTangent类以添加环绕通知方法。最后介绍了利用AOP拦截注解的方法,只需修改全局切入点即可实现。使用Spring AOP进行切面编程可以方便地实现对代码的增强和拦截。 ... [详细]
  • 使用freemaker生成Java代码的步骤及示例代码
    本文介绍了使用freemaker这个jar包生成Java代码的步骤,通过提前编辑好的模板,可以避免写重复代码。首先需要在springboot的pom.xml文件中加入freemaker的依赖包。然后编写模板,定义要生成的Java类的属性和方法。最后编写生成代码的类,通过加载模板文件和数据模型,生成Java代码文件。本文提供了示例代码,并展示了文件目录结构。 ... [详细]
  • 本文介绍了一个Java猜拳小游戏的代码,通过使用Scanner类获取用户输入的拳的数字,并随机生成计算机的拳,然后判断胜负。该游戏可以选择剪刀、石头、布三种拳,通过比较两者的拳来决定胜负。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 标题: ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
author-avatar
小七
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有