有时为了满足特有的需求,可能需要对现有的分词器进行调整,为了完成对这些特有分词器的配置,需要完成以下步骤。
(基本思路和配置IKAnalyzer一致)
1.开发特有的分词器,并继承solr中的类BaseTokenizerFactory。
例如笔者调整了一个分词器为OBOLowercaseTokenizer
类层次结构如下图:

然后编写BOBSolr类,继承BaseTokenizerFactory。
public class BOBSolr extends BaseTokenizerFactory {
@Override
public Tokenizer create(Reader input) {
return new OBOLowercaseTokenizer(input);
}
}
2.在schema.xml中配置
<!-- BOB -->
<fieldType name="bob" class="solr.TextField">
<analyzer type="index">
<tokenizer class="com.baitengsoft.FTDB.analyzer.solr.BOBSolr" />
</analyzer>
<analyzer type="query">
<tokenizer class="com.baitengsoft.FTDB.analyzer.solr.BOBSolr" />
</analyzer>
</fieldType>
---------------------------------------------
如果你的分词器有特定的参数需要在schema.xml中配置,可以参考IKAnalyzer,IKTokenizerFactory如下所述:
/**
*
*/
package org.wltea.analyzer.solr;
import java.io.Reader;
import java.util.Map;
import org.apache.lucene.analysis.Tokenizer;
import org.apache.solr.analysis.BaseTokenizerFactory;
import org.wltea.analyzer.lucene.IKTokenizer;
/**
* 实现Solr1.4分词器接口
* 基于IKTokenizer的实现
*
* @author 林良益、李良杰
*
*/
public final class IKTokenizerFactory extends BaseTokenizerFactory{
private boolean isMaxWordLength = false;
/**
* IK分词器Solr TokenizerFactory接口实现类
* 默认最细粒度切分算法
*/
public IKTokenizerFactory(){
}
/*
* (non-Javadoc)
* @see org.apache.solr.analysis.BaseTokenizerFactory#init(java.util.Map)
*/
public void init(Map<String,String> args){
String _arg = args.get("isMaxWordLength");
isMaxWordLength = Boolean.parseBoolean(_arg);
}
/*
* (non-Javadoc)
* @see org.apache.solr.analysis.TokenizerFactory#create(java.io.Reader)
*/
public Tokenizer create(Reader reader) {
return new IKTokenizer(reader , isMaxWordLength());
}
public void setMaxWordLength(boolean isMaxWordLength) {
this.isMaxWordLength = isMaxWordLength;
}
public boolean isMaxWordLength() {
return isMaxWordLength;
}
}
isMaxWordLength为其特有的参数。