跟益达学Solr5之拼音分词

         应群友强烈要求,特此更新此篇博客。其实在我的Lucene5系列博客里我已经介绍了拼音分词,遗憾的是,大家不能举一反三,好吧,还是我亲自上马吧!

        首先我们来看看我当初使用Lucene5是如何实现的,

 在Solr5中,我们只需要为IKTokenizer扩展一个IKTokenizerFactory,为PinyinTokenFilter扩展一个PinyinTokenFilterFactory,为PinyinNGramTokenFilter扩展一个PinyinNGramTokenFilterFactory,其中IKTokenizerFactory我已经扩展过了,剩下需要做的就是自定义PinyinTokenFilterFactory和PinyinNGramTokenFilterFactory了。如果你不知道如何扩展,请参看Solr的StopFilterFactory类源码,照葫芦画瓢。OK,我来全程截图示范,我是如何扩展的?

     既然是要扩展PinyinTokenFilterFactory,从类名就知道它是PinyinTokenFilter的工厂类,所以我们首先需要把我之前写的PinyinTokenFilter和PinyinNGramTokenFilter类copy到一个新的项目中来,如图:

 我新建一个solr-analyzer-extra Java Project,把我之前写的几个类copy到如图红色框住的package中,那几个类你在我Lucene5系列博客中都可以找到源码,或者你到我的GitHub上也可以得到相关源码。我的GitHub地址待会儿我会在博客的结尾处贴出来,敬请关注哦!图片中显示还有ik和ansj两个package,这就是我为了前面几篇博客扩展的TokenizerFactory,你懂的!然后我们需要添加依赖的Jar包,如图:

 之所以分Lucene5和Solr5两个包,就是为了方便打包Jar包,这样我就可以把lucene5包下的类单独打包成一个jar,solr5下打包成一个jar,当你仅仅只是在Lucene5下需要使用拼音分词,那solr5包下的类是用不到的,打包成两个jar是为了按需加载类,你懂的!特此说明。

     OK,开始在Solr5包下扩展PinyinTokenFilterFactory,我扩展的源码如图:


 扩展的PinyinNGramTokenFilterFactory源码如图:

 对应的PinyinNGramTokenFilter类我稍作了修改,主要是添加了nGramNumber参数,用于控制是否对纯数字进行nGram处理,有时候可能并不希望对类似 2011 这样的数字进行nGram,当然如果你需要对纯数字字符串进行nGram处理,请把nGramNumber参数设置为true即可,默认该值为false。PinyinNGramTokenFilter类我修改的地方如下:

 

 

 

其中定义了一个常量类Constant,就是不想把默认值常量写死在各个类里,所以统一放到了一个常量类里,如图:


上面涉及到的所有源码我待会儿都会在底下附件里上传分享给你们。OK,到此该扩展的类都编写完毕了,我们需要将他们打包成jar,如图:

 

 



 

 

 

 

 然后你就会在你的桌面上看到这个jar包,

 OK,同理,对solr5包下的类进行打包,提供给使用Solr5的用户使用,如图:

 

 

 

 然后两个jar包就都打好了,如图:

 接下来,我们就需要把我们打好的jar包导入到我们的core的lib目录下,如图:

 由于我们的汉字转拼音使用到了pinyin4j类库,所以我们还需要把pinyin4j的jar包也复制到当前core的lib目录下,如图:

 由于我们是先进行中文分词,然后再对分出来的中文词语进行拼音转换,而这里我以IK分词器为例,所以我们还需要把IK的jar包也copy进去,如图:

OK,jar包导入完毕后,我们需要在我们的schema.xml中定义域类型,配置示例如图:

 

 这是默认最基本的配置,当然PinyinTokenFilterFactory和PinyinNGramTokenFilterFactory这两个工厂类是有可选的配置参数可以设置的,请看图:

 

 因此,你也可以这样配置:

 域类型定义好后,你需要在你的某个域上应用这个新定义的text_pinyin域类型,如图:

 OK,启动你的tomcat,开始进行拼音分词测试,如图:

 

 OK,到此关于Solr5中关于拼音分词以及拼音搜索就讲解到这儿了,上述涉及到的jar包和源码请到底下的附件里去下载。solr-analyzer-extra Java Project依赖的jar体积太大,ITEye里无法上传,我已上传到我的百度网盘:看这里,看这里!!!

如果你在学习过程中有任何问题,请通过以下方式联系到我:

    益达的GitHub地址请猛戳我,用力,吃点劲儿!!!

 

   益达Q-Q:                7-3-6-0-3-1-3-0-5

 

 

   益达的Q-Q群:      1-0-5-0-9-8-8-0-6

     



 

猜你喜欢

转载自iamyida.iteye.com/blog/2222508
今日推荐