改写IKAnalyzer分词器

来源:互联网 发布:知乎内容推送到kindle 编辑:程序博客网 时间:2024/06/04 14:28

ik4solr4.3

solr4.3的ik分词器([https://github.com/lgnlgn/ik4solr4.3] 主要改动不是我完成的,只是指点。使用maven)

  • 支持从solr自己的环境中获取自定义词典(使用solr的ResourceLoader, 只需要把字典文件放到conf目录里)

  • 增加一个定时更新的停用词、同义词工厂类


============我是分割线====以下是详细说明================

[html] view plaincopy
  1. 6.1新增功能说明  
  2. ①、由分级判断改为权重判断,增加了单字权重判断。   
  3.     在org.wltea.analyzer.core包中LexemePath.java:compareTo(LexemePath)函数  
  4.   
  5. ②、增加了单字字频字典,除去了停止字典(交给stopFilter处理)  
  6. 在org.wltea.analyzer.dic包中Dictionary.java:  
  7.  /* 单字带词频词典 */  
  8. private DictCharNode _CharFreqDict;  
  9.   
  10. 在DictCharNode.java中:  
  11. 用HashMap实现了单字和字频的存储。  
  12.   
  13. ③、实现solr的接口  
  14. 在org.wltea.analyzer.lucene包中。  
  15. 一、IKHandler.java:用于处理HTTP请求,现只实现主词典的动态请求加载。  
  16.     请求参数:http://xxx/ikupdate?dicpath=dic.txt  
  17.     注意事项:1、多个字典文件以逗号分隔。  
  18.               2、在Zookeeper集群上时,得先上传修改后的字典文件,再更新。  
  19.     使用方法:需在solrconfig.xml中配置  
  20. <requestHandler name="/ikupdate" class="org.wltea.analyzer.lucene.IKHandler">  
  21.     <lst name="defaults">  
  22.     </lst>   
  23. </requestHandler>  
  24. 可以配置默认参数  
  25. <str name=”dicpath”>dic.txt</str>  
  26.   
  27. 二、IKTokenizerFactory.java  
  28. IKTokenizer.java:用于生成IK分词器实例对象。  
  29.     注意事项:IK共用一个字典文件,主字典和扩展字典都加载在_MainDict中。  
  30.     使用方法:在schema.xml中,增加dicpath配置项,每次生成对象时,都会加载。  
  31.               字典重建已封装在Dictionary类中,addDic2MainDic()函数  
  32.   
  33. 三、IKStopFilter.java  
  34. IKStopFilterFactory.java:停止词过滤  
  35. IKSynonymFilterFactory.java:同义词过滤  
  36.     注意事项:1、字典的切换采用solr默认接口实现  
  37.               2、2个过滤器在schema.xml均增加了autoupdate配置项,为true,则                     会定时去更新字典文件。  
  38.     使用方法:在schema.xml中,添加自己的过滤器类,增加配置项。  
  39.   
  40. 四、TimelyThread.java:  
  41. 停止词和同义词更新管理类,如果设置了autoupdate=true,则注册到此管理类中,由管理类定时去触发更新操作。  
  42.   
  43. 五、schema.xml示例  
  44.   
  45.   
  46.   
  47.   < fieldType name="text_cn" class="solr.TextField" positionIncrementGap="100" >          
  48.   
  49.   <analyzer type="index" >         
  50.     < tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" />  
  51.     < filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />  
  52.    < filter class="solr.LowerCaseFilterFactory"/>  
  53.   < /analyzer>  
  54.   
  55.   < analyzer type="query">  
  56.     <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" dicPath="extDic.txt,extDic1.txt"/>  
  57.     <filter class="org.wltea.analyzer.lucene.IKStopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" autoupdate="true"/>  
  58.     <filter class="org.wltea.analyzer.lucene.IKSynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" autoupdate="true"/>  
  59.     <filter class="solr.LowerCaseFilterFactory"/>  
  60.   </analyzer>  
  61.   </fieldType>  

原创粉丝点击