您的位置:首页 > 其它

全文检索引擎Solr系列——整合中文分词组件mmseg4j

2016-03-18 17:52 477 查看
默认Solr提供的分词组件对中文的支持是不友好的,比如:“VIM比作是编辑器之神”这个句子在索引的的时候,选择FieldType为”text_general”作为分词依据时,分词效果是:



它把每一个词都分开了,可以想象如果一篇文章这样分词的搜索的体验效果非常差。能够和Solr集成的中文分词组件有很多,比如:mmseg4j、IkAnalyzer、ICTCLAS等等。各有各的特点。这篇文章讲述如何整合Solr与mmseg4j。mmeseg4j最新版本是1.9.1,下载解压,提取其中的三个文件:mmseg4j-analysis-1.9.1.jar,
mmseg4j-core-1.9.1.jar,mmseg4j-solr-1.9.1.jar。放到目录:E:\solr-4.8.0\example\solr-webapp\webapp\WEB-INF\lib,修改配置文件schema.xml,添加下面的两段代码:

fieldType:

与fieldType对应的field:

此时就算配置完成了,重启服务:java -jar start.jar,来看看mmseg4j的分词效果怎么样,打开Solr管理界面,点击左侧的Analysis页面



对比之前的分词效果,改进了很多,差不多就是正常的语义了。这里在分词的时候你有可能会遇到一个问题:

TokenStream contract violation: reset()/close() call missing, reset() called multiple times, or subclass does not call super.reset(). Please see Javadocs of TokenStream class for more information about the correct consuming workflow.

这个是Solr4.8环境下mmseg4j的一个bug,这是mmseg4j-analysis-1.9.1.jar引起的,需要修改源码,找到文件:mmseg4j-1.9.1\mmseg4j-analysis\src\main\java\com\chenlb\mmseg4j\analysis\MMSegTokenizer.java,加上
super.reset()


修改完之后用maven重启编译:mvn clean package -DskipTests,用新的mmseg4j-1.9.1\mmseg4j-analysis\target\mmseg4j-analysis-1.9.2-SNAPSHOT.jar替换掉原来那个文件,重启服务就ok了。

mmeseg4j-1.9.1这个版本的的词库全部打包放在了jar文件里面,因此无需再指定词库文件(chars.dic,units.dic,words.dic),当然你也可以覆盖这些文件,只需要吧预替换的文件放在在WEB-INF\data\即可。

现在添加两个中文文档到索引中去,试试mmeseg4j的效果怎么样:

保存为utf-8格式的文件名:mmseg4j-solr-demo-doc.xml,加入到Solr中去:

看搜索结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: