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