我玩的应用:
|
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
|
|