设为首页 收藏本站
查看: 1055|回复: 0

[经验分享] 【apache solr系列】jcseg与pinyinTokenFilter实现中文缩写查找

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-11-12 07:49:04 | 显示全部楼层 |阅读模式
  转载请注明:http://blog.iyunv.com/weijonathan/article/details/40504029
  今天要写的是关于分词查询的。
  我们先来看下下面这张图
DSC0000.jpg DSC0001.jpg


  应该说很多做搜索的系统都会涉及到的一个话题;中文缩写搜索,当你输入相应的中文缩写的时候,会给你提示相应的中文词组
  而现在网上各式各样的文章都没有多少能真正介绍如何实现的。经过前阵子的研究,我这边整理一个我自己研究的效果,
  先来看下相关插件以及下载地址:
  jcseg下载地址及官网
  下载地址:http://git.oschina.net/lionsoul/jcseg


  官网地址:https://code.google.com/p/jcseg/


  pinyinTokenFilter插件地址:
  https://github.com/Jonathan-Wei/pinyinTokenFilter
  jsceg是一个中文分词器,而pinyinTokenFilter是一个pinyin过滤器。
  1、下载jcseg后解压,将jcseg\output目录中的jar包拷贝到solr的安装目录下
  2、将jcseg的lexicon分词库放到apache-tomcat-7.0.53\webapps\solr\WEB-INF\classes目录下并配置lexicon.path路径
  1)、jcseg默认的lexicon.path也就是分词词库的位置是在solr发布项目的lib目录;所以可以选择将压缩包中的lexicon目录拷贝到lib包底下
  2)、配置lexicon.path配置到你指定的词库目录
  疑问:
  这里可能大家会问我为什么不用ik,原因是在Solr4.0发布以后,官方取消了BaseTokenizerFactory接口,而直接使用Lucene Analyzer标准接口。因此IK分词器2012 FF版本也取消了org.wltea.analyzer.solr.IKTokenizerFactory类。所以IK无法配置fliter节点;配置了之后启动tomcat直接就报错了;具体错误内容大家可以自己试验下,我这里就不具体展开了!
  3、下载pinyinTokenFilter,(这个插件我做了一点修改,作者当前的项目存在bug,修改的内容不多,大家可以看我github上的提交修改内容)配置schame.xml添加以下配置
  

<fieldType name=&quot;text_pinyin&quot; class=&quot;solr.TextField&quot;>
<analyzer type=&quot;index&quot;>
<tokenizer class=&quot;org.lionsoul.jcseg.solr.JcsegTokenizerFactory&quot; mode=&quot;complex&quot;/>
<filter class=&quot;me.dowen.solr.analyzers.PinyinTransformTokenFilterFactory&quot;
isOutChinese=&quot;true&quot; firstChar=&quot;true&quot; minTermLength=&quot;1&quot;/>
<!--<filter class=&quot;me.dowen.solr.analyzers.PinyinTransformTokenFilterFactory&quot;
isOutChinese=&quot;true&quot; firstChar=&quot;false&quot; minTermLength=&quot;1&quot;/>-->
<filter class=&quot;solr.StopFilterFactory&quot; ignoreCase=&quot;true&quot;
words=&quot;stopwords.txt&quot; />
<filter class=&quot;solr.LowerCaseFilterFactory&quot; />
<filter class=&quot;solr.RemoveDuplicatesTokenFilterFactory&quot;/>
</analyzer>
<analyzer type=&quot;query&quot;>
<tokenizer class=&quot;org.lionsoul.jcseg.solr.JcsegTokenizerFactory&quot; mode=&quot;complex&quot;/>
<filter class=&quot;solr.SynonymFilterFactory&quot; synonyms=&quot;synonyms.txt&quot;
ignoreCase=&quot;true&quot; expand=&quot;true&quot; />
<filter class=&quot;solr.StopFilterFactory&quot; ignoreCase=&quot;true&quot;
words=&quot;stopwords.txt&quot; />
<filter class=&quot;solr.LowerCaseFilterFactory&quot; />
</analyzer>
</fieldType>这里注意下,这个插件支持拼音全拼以及缩写,但是当配置缩写和全频一起使用的时候,貌&#20284;不大好使。所以我这里也只配置了一个缩写,让大伙看看效果;  
  看下参数的一些说明:
  isOutChinese:是否保留原输入中文词元。可选&#20540;:true(默认)/false


  firstChar:输出完整拼音&#26684;式还是输出简拼。简拼输出是由原中文词元的各单字的拼音结果的首字母组成的。可选&#20540;:true(默认)/false


  minTermLength:仅输出字数大于或等于minTermLenght的中文词元的拼音结果。默认&#20540;为2。


  接下来看下solr中的分析结果:



DSC0002.jpg 这里大伙可以看到,“猩球崛起“缩写被分为x,xq,xqj,xqjq,当你输入这4个缩写的时候它就会给你提示包含&quot;猩球崛起&quot;的内容;
  接下来看下我们查询结果:

  可以看到,我输入xqj进行查询,是可以查到猩球崛起这个内容的。这里猩球崛起是一个词语,jcseg是支持自定义词库的,所以这里我配置了自己的一个简单的词库;
  pinyinTokenFilter这个插件,如果不配合其他分词器使用的话,用插件README里面的方法进行测试,你是会看到你输入的单词会被分为一个个单字的词。README中使用的是
  

<tokenizer class=&quot;solr.StandardTokenizerFactory&quot; />pinyinTokenFilter这个插件还有不完全的地方,所以大伙使用过程中有什么问题可以提下,我也跟踪一下。谢谢。  
  


  


  



版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-138086-1-1.html 上篇帖子: 提高solr的搜索速度 下篇帖子: solr solrcloud 检索 搜索 zookeeper 分布式 部署
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表