IKTokenizerFactory实现

直接上完整代码吧!

/**
 * IK 中文分词
 */
package org.wltea.analyzer.lucene;

import java.io.Reader;
import java.util.Map;

import org.apache.lucene.analysis.util.TokenizerFactory;
import org.apache.lucene.util.AttributeFactory;
import org.apache.lucene.analysis.Tokenizer;

/**
 * IK中文分词
 * Solr分词器工厂实现
 * 基于IKTokenizer的实现
 */
public class IKTokenizerFactory extends TokenizerFactory {
	
	
	private boolean useSmart = false;

	/** 
	 * IK分词器Solr TokenizerFactory接口实现类 
	 * 默认最细粒度切分算法 
	 */ 
	public IKTokenizerFactory(Map<String,String> args){ 
		super(args);

		String _useSmart = args.get("useSmart");
        this.useSmart = Boolean.parseBoolean(_useSmart);
   	}
	
	//调整支持Lucene5.0 TokenizerFactory的Tokenizer create 不在有第二参数Reader reader
	@Override
	//public Tokenizer create(AttributeFactory factory, Reader reader) {
	public Tokenizer create(AttributeFactory factory) {
		return new IKTokenizer(useSmart);
	}

	public void setUseSmart(boolean useSmart) {
		this.useSmart = useSmart;
	}

	public boolean useSmart() {
		return useSmart;
	}

}

注意此版本是我升级Solr5时修改了的,Solr4.X的把create改回去就好了。

网上有的版本在构造中调用super(args)之后会check下args.isEmpty(),如果你也是Lucene5/Solr5的话,请跟我一样,移除这个没啥用的校验,试试你就知道了。

你可能感兴趣的:(IKTokenizerFactory实现)