Apache Solr 增加IKAnalyzer分词器

下载IKAnalyzer

IKAnalyzer分词器下载地址:http://code.google.com/p/ik-analyzer/downloads/detail?name=IKAnalyzer3.2.8%20bin.zip&can=2&q=


配置IKAnalyzer

修改scheme.xml

<fieldType name="text" class="solr.TextField">
        <analyzer type="index">
          <tokenizer class="org.wltea.analyzer.solr.IKTokenizerFactory"  isMaxWordLength="false"/>
          <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
          <filter class="solr.LowerCaseFilterFactory"/>
        </analyzer>
        <analyzer type="query">
           <tokenizer class="org.wltea.analyzer.solr.IKTokenizerFactory" isMaxWordLength="true"/>
           <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
           <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
           <filter class="solr.LowerCaseFilterFactory"/>
        </analyzer>   
</fieldType>

索引处做最细分词,尽量让查询时能匹配

isMaxWordLength="false"
<analyzer type="index">
          <tokenizer class="org.wltea.analyzer.solr.IKTokenizerFactory"  isMaxWordLength="false"/>
          <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
          <filter class="solr.LowerCaseFilterFactory"/>
        </analyzer>
<analyzer type="query">
           <tokenizer class="org.wltea.analyzer.solr.IKTokenizerFactory" isMaxWordLength="true"/>
           <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
           <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
           <filter class="solr.LowerCaseFilterFactory"/>
        </analyzer>

查询处做最大分词,尽量查找用户所需

 

TokenBranch中加了个方法:
    void optimizeTokenBranchs() {
      if (lexeme != null) {
        return;
      }
      if(acceptedBranchs != null && acceptedBranchs.size() == 2) {
        final TokenBranch firstBranch = acceptedBranchs.get(0);
        if (firstBranch.getLeftBorder() == leftBorder &&
            firstBranch.getRightBorder() == rightBorder &&
            firstBranch.getLexeme().getLexemeType() == Lexeme.TYPE_CJK_NORMAL) {
          acceptedBranchs.remove(1);
        }
      }
      if (nextBranch != null) {
        nextBranch.optimizeTokenBranchs();
      }
    }

就是去掉这种情况,done.

 

配置jar包

IKAnalyzer.jar放到:work/Je.../webapp/WEB-INF/lib/IKAnalayzer.jar
IKAnalyzer.cfg.xml放到:work/Je.../webapp/WEB-INF/classes/IKAnalyzer.cfg.xml

posted @ 2014-04-22 12:04  山顶的鱼  阅读(353)  评论(0编辑  收藏  举报