solr+庖丁中文分词(paoding)实例解析
paoding分词器,最新的JAR文件为paoding-analysis-2.0.4-beta,不支持lucene3.0以上版本,作者提供了支持lucene3.0以上版本的源码,但没有打成JAR包发布。附件里有编译好的源码,支持lucene3.0以上版本,同时还添加了一个类,该类的作用是让庖丁分词器支持solr。添加的类文件如下:package net.paoding.analysis.analyzer.solr;
import java.io.Reader;
import java.util.Map;
import net.paoding.analysis.analyzer.PaodingTokenizer;
import net.paoding.analysis.analyzer.TokenCollector;
import net.paoding.analysis.analyzer.impl.MaxWordLengthTokenCollector;
import net.paoding.analysis.analyzer.impl.MostWordsTokenCollector;
import net.paoding.analysis.knife.PaodingMaker;
import org.apache.lucene.analysis.Tokenizer;
import org.apache.solr.analysis.BaseTokenizerFactory;
/**
* 实现Solr3.2分词器接口
* 基于PaodingTokenizer的实现
*
* @author sunlightcs
*
* http://hi.juziku.com/sunlightcs/
*
*/
public class ChineseTokenizerFactory extends BaseTokenizerFactory{
/**
* 最多切分
*/
public static final String MOST_WORDS_MODE = "most-words";
/**
* 按最大切分
*/
public static final String MAX_WORD_LENGTH_MODE = "max-word-length";
private String mode = null;
private TokenCollector tokenCollector = null;
public void init(Map<String,String> args) {
setMode(args.get("mode"));
}
public Tokenizer create(Reader input) {
return new PaodingTokenizer(input, PaodingMaker.make(), tokenCollector);
}
/**
* 默认按最多切分
*/
public void setMode(String mode) {
if (mode == null || "default".equalsIgnoreCase(mode) || MOST_WORDS_MODE.equalsIgnoreCase(mode)) {
tokenCollector = new MostWordsTokenCollector();
} else {
tokenCollector = new MaxWordLengthTokenCollector();
}
}
}已经将该类文件与paoding源码打包成了paoding-analysis3.0.jar文件,附件里有下载。
在使用庖丁分词器时,要从http://code.google.com/p/paoding/处下载词典及配置文件。 其中,paoding-dic-home.properties配置文件里,要指定词典的路径,如果词典放在classes目录下面,则词典的路径为:paoding.dic.home=classpath:dic
将这些配置文件及词典放到apache-solr3.2.0/WEB-INF/classes目录下,并将paoding-analysis3.0.jar放到apache-solr3.2.0/WEB-INF/lib目录里。
然后在solr中加入paoding分词器,打开schema.xml文件,位置:solr/home/conf/schema.xml<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<!-- 使用paoding分词器,按最多切分 mode="most-words"这个是在上面哪个类里定义好的。-->
<tokenizer class="net.paoding.analysis.analyzer.solr.ChineseTokenizerFactory" mode="most-words"/>
··· ···
</analyzer>
<analyzer type="query">
<tokenizer class="net.paoding.analysis.analyzer.solr.ChineseTokenizerFactory" mode="most-words"/>
··· ···
</analyzer>
</fieldType>再重启tomcat,solr3.2就可以使用paoding分词器了。
文章来源:http://go.cxweb.com.cn/jvyu5
页:
[1]