在Solr4.0发布以后,官方取消了BaseTokenizerFactory接口,而直接使用Lucene Analyzer标准接口。因此IK分词器2012 FF版本也取消了org.wltea.analyzer.solr.IKTokenizerFactory类。
所以以前在schema.xml文件中加入的内容:
<fieldType name="text" class="solr.TextField" positionIncrementGap="100"> <analyzer type="index"> <tokenizer class = "org.wltea.analyzer.solr.IKTokenizerFactory" isMaxWordLength="false" /> ...... </analyzer> <analyzer type="query"> <tokenizer class = "org.wltea.analyzer.solr.IKTokenizerFactory" isMaxWordLength="true" /> ...... </analyzer> </fieldType>
而现在在schema.xml文件中加入的内容为:
<fieldType name="text" class="solr.TextField"> <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/> </fieldType>
这也是之前配置会出错的原因,除非自己实现了IKTokenizerFactory类。
以下是IK分词器,Lucene Analyzer接口实现 兼容Lucene 4.0版本代码
public final class IKAnalyzer extends Analyzer { private boolean useSmart; public boolean useSmart() { return useSmart; } public void setUseSmart(boolean useSmart) { this.useSmart = useSmart; } /** * IK分词器Lucene Analyzer接口实现类 * * 默认细粒度切分算法 */ public IKAnalyzer() { this(false); } /** * IK分词器Lucene Analyzer接口实现类 * * @param useSmart * 当为true时,分词器进行智能切分 */ public IKAnalyzer(boolean useSmart) { super(); this.useSmart = useSmart; } /** * 重载Analyzer接口,构造分词组件 */ @Override protected TokenStreamComponents createComponents(String fieldName,final Reader in) { Tokenizer _IKTokenizer = new IKTokenizer(in, this.useSmart()); return new TokenStreamComponents(_IKTokenizer); } }
solr调用analyzer: http://ronxin999.blog.163.com/blog/static/4221792020117854548995/?suggestedreading