跟益达学Solr5之使用MMSeg4J分词器
要想在Sor中使用MMSeg4J分词器,首先你需要自定义一个TokenizerFactory实现类,虽然直接配置Analyzer类也可以,但那样无法配置Analyzer构造函数的参数,不够灵活,存在弊端,所以我一直都是以扩展TokenizerFactory的方式来讲解类似MMSeg4J这样的中文分词器在Solr中的使用。
MMSegTokenizerFactory类我花了3个多小时修改了源码并经过N多测试,表示已经可以使用,我主要的是针对Lucene5 API对MMSegTokenizer类做了升级更新并添加了自定义停用词功能,默认MMSeg4J没有实现自定义停用词功能。相关jar包请到底下的附件里去下载。下面介绍MMSeg4J在solr5中的使用步骤:
1. copy依赖的jar包到当前core\lib目录下,如图:
2.在你的schema.xml中配置fieldType应用上我扩展的MMSegTokenizerFactory类,具体配置看图:
- <fieldType name="text_mm" class="solr.TextField">
- <analyzer type="index">
- <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="simple"
- stopwordsPath="mmseg-stopwords/stopwords.dic"/>
- </analyzer>
- <analyzer type="query">
- <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex"/>
- </analyzer>
- </fieldType>
其中mode参数表示MMSeg4J的分词模式,自带有3种可选值:simple,complex,maxword, mode参数不配置默认为maxword模式;stopwordsPath是用来配置自定义停用词加载路径的,默认是相对于classPath的,自定义停用词字典文件放置路径请看图:
自定义停用词词典文件加载路径配置参数是可选的,不过由于MMSeg4J没有内置停用词功能,所以像空格字符,标点符号等等都会被分出来,所以一般建议添加停用词词典文件。不过要注意的是,自定义的停用词词典文件的编码必须是UTF-8无BOM格式,而且在你使用文本编辑软件打开进行编辑的时候,请务必将你的编辑软件的编码设置为UTF-8,否则可能会出现本来是UTF-8无BOM编码,你打开编辑保存后编码就改变了。当你发现明明停用词在词典文件里,却很奇怪不起作用时,那十有八九是因为词典文件编码已经被破坏,建议词典文件不要自己新建,可以保留一个dic模版文件,每次直接copy过来修改文件名然后再打开编辑。
3.然后你需要在你的某个field域上应用刚才定义的FieldType(域类型),如图:
OK,现在你可以启动你的Tomcat进行分词测试了,如图:
mmseg-stopwrods目录下的stopwords.dic停用词词典文件我添加了如下停用词:
第3个是一个空格字符,第4个是中文状态下的逗号字符,第5个是中文状态下的句号字符。你想要剔除哪些字符,具体留给你们自己去完善。
如果我想配置自定义新词呢,比如么么哒,萌萌哒之类的,默认肯定是分不出来的,该如何配置呢?MMSeg4J默认是内置了自定义词典扩展功能的,且默认加载思路如下:
从默认目录加载词库文件, 查找默认目录顺序:
1.首先从系统属性mmseg.dic.path指定的目录中加载
2.若从系统属性mmseg.dic.path指定的目录中加载不到,再从classpath/data目录加载
3.若从classpath/data目录加载不到,再从user.dir/data目录加载
需要注意的是,MMSeg4J对于字典dic文件的命名有要求,只有以words开头 以.dic结尾的文件才会被加载。
知道上述加载原理,那我们只需要把自定义扩展词典文件如图放置即可:
到此,MMSeg4J分词器在Solr5中的使用就讲解完毕了,请照葫芦画瓢,100%会配置成功的,如果你看不到效果,请对照截图看清楚词典文件放置路径,检查你的dic文件的编码是否为UTF-8无BOM,如果你还有任何问题,请通过以下方式联系到我:
益达的GitHub地址:请猛戳我,用力,吃点劲儿!!!
益达Q-Q: 7-3-6-0-3-1-3-0-5
益达的Q-Q群: 1-0-5-0-9-8-8-0-6
转载:http://iamyida.iteye.com/blog/2221224
跟益达学Solr5之使用MMSeg4J分词器相关推荐
- 跟益达学Solr5之使用IK分词器
在Solr中该如何使用IK分词器呢,这是小伙伴们问的频率比较高的一个问题,今晚特此更新此篇博客.其实之前我在其他博客里已经使用了IK分词器,只是我没做详细说明. 在schema.xml配置中其实有很多 ...
- 跟益达学Solr5之使用Ansj分词器
摘要: OK,直接开门见山,不绕弯子啦!基于上篇博客,我们知道了在Solr中配置分词器有两种方式,一种是直接配置分词器类,比如: Xml代码 <fieldType name= ...
- 跟益达学Solr5之使用Tomcat部署Solr
最近忙着面试以及生活琐事把时间都霸占了,博客拖了4天没更新了,让各位久等了,望多多包涵!不过还好,工作已经敲定了,终于可以安心的学习Solr并分享我学习的点点滴滴啦! 上回我们在Jetty下部署了,不 ...
- 跟益达学Solr5之从MySQL数据库导入数据并索引
最近有小伙伴跟我抱怨说:益达,最近博客更新的有点慢呐.其实不是我变懒了,我是不想因为数量而降低了博客的质量,我需要抱着对你们负责的态度来写每一篇博客,绝不能含糊啊,所以,还望大家多多包涵呐. 今天群里 ...
- 跟益达学Solr5之批量索引JSON数据
假定你有这样一堆JSON数据, Json代码 [ {"id":"1", "name":"Red Lobster", ...
- 跟益达学Solr5之拼音分词
应群友强烈要求,特此更新此篇博客.其实在我的Lucene5系列博客里我已经介绍了拼音分词,遗憾的是,大家不能举一反三,好吧,还是我亲自上马吧! 首先我们来看看我当初使用Lucene5是如何实现的, ...
- 跟益达学Solr5之使用Tika从PDF中提取数据导入索引(转字:http://www.tuicool.com/articles/JfUfaey)
开始此篇之前,我已经假定你已经学会了如何在Tomcat下部署Solr5啦.即启动Tomcat后你能看到Solr5的Web UI界面.OK,下面直接进入正题. 首先你需要在你的core根目录下新建一个l ...
- 跟益达学Solr5之Facet一瞥
Facet属于Solr的高级查询部分,之所以在还没有讲解普通Query之前,就开始更新Facet查询,是因为看到很多小伙伴都在为Facet而困扰,其实根本原因还是对Facet不理解.Facet英文单词 ...
- 跟益达学Solr5之使用Jetty部署Solr
开始之前,你首先需要了解Solr是什么,以下是百度百科里对Solr的解释: Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器.同时对其进行了扩展,提供了比Lucene更为丰富 ...
最新文章
- 内卷时代的晋升述职要“想明白”和“讲清楚”
- boost::mp11::mp_empty相关用法的测试程序
- 一份从入门到精通NLP的完整指南 | NLPer
- php 读csv跳过标题,请问怎么使用Python编辑csv文件时跳过标题
- mysql 中float存入int数据显示失真问题
- element ui 点击修改开启停用按钮状态
- 学习POI处理word
- 网络数据库的复制和同步(一)
- android项目中如何导入model
- Grafana 简单设置
- 抖音书单号怎么取名,抖音书单号大概多久能起来
- 计算机技术对高分子的意义,计算机技术在高分子材料工程中的应用.docx
- 在Vue2中使用百度脑图kityminder-core
- 简约至上:你必须知道的产品设计
- 强化学习Reinforcement Learning概念理解篇(一)
- MOSES的高级特征和功能
- Dart学习3、数据类型详解
- 实现高德地图签到签退(uniapp)
- 微软亚洲研究院院长:“中国不妨引进科技外援”
- 信号完整性分析系列——1基本概念