`
lxwt909
  • 浏览: 566423 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

跟益达学Solr5之拼音分词

    博客分类:
  • Solr
阅读更多

         应群友强烈要求,特此更新此篇博客。其实在我的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

 

     



 

  • 大小: 26.6 KB
  • 大小: 14.4 KB
  • 大小: 9 KB
  • 大小: 59.5 KB
  • 大小: 49.1 KB
  • 大小: 60 KB
  • 大小: 53.8 KB
  • 大小: 40.4 KB
  • 大小: 52.8 KB
  • 大小: 37.1 KB
  • 大小: 30.8 KB
  • 大小: 42.8 KB
  • 大小: 66.4 KB
  • 大小: 73.8 KB
  • 大小: 81.1 KB
  • 大小: 170.6 KB
  • 大小: 80.5 KB
  • 大小: 91.9 KB
  • 大小: 43 KB
  • 大小: 65.5 KB
  • 大小: 66.7 KB
  • 大小: 78 KB
  • 大小: 74.4 KB
  • 大小: 34.6 KB
  • 大小: 106.4 KB
  • 大小: 121.5 KB
  • 大小: 108 KB
  • 大小: 105.3 KB
  • 大小: 35.1 KB
  • 大小: 43.5 KB
  • 大小: 47.2 KB
  • 大小: 73 KB
  • 大小: 72.3 KB
  • 大小: 66 KB
  • 大小: 101.1 KB
  • 大小: 74.5 KB
10
7
分享到:
评论
3 楼 fengshizty 2016-09-23  
楼主辛苦啦   ,能否共享下源码
2 楼 play1369 2016-01-25  
多音字有问题,比如:重庆 zhongqing
没有chongqing
1 楼 oaibf 2015-07-01  
拼音搜索 怎么搜出对对应的中文呢?

相关推荐

Global site tag (gtag.js) - Google Analytics