solr中使用paoding

solr版本3.4.0

paoding版本(Revision154), 下载源代码http://paoding.googlecode.com/svn/trunk/,  到paoding-analysis目录执行build.bat, 生成paoding-analysis.jar

 

package com.sh2600.test.paoding;

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;  

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;  
  
    public void setMode(String mode) {  
        if (mode == null || MOST_WORDS_MODE.equalsIgnoreCase(mode)  
                || "default".equalsIgnoreCase(mode)) {  
            this.mode = MOST_WORDS_MODE;  
        } else if (MAX_WORD_LENGTH_MODE.equalsIgnoreCase(mode)) {  
            this.mode = MAX_WORD_LENGTH_MODE;  
        } else {  
            throw new IllegalArgumentException("不合法的分析器Mode参数设置:" + mode);  
        }  
    }  
  
    @Override  
    public void init(Map args) {  
        super.init(args);  
        setMode(args.get("mode").toString());  
    }  
  
    public Tokenizer create(Reader input) {  
        return new PaodingTokenizer(input, PaodingMaker.make(),  
                createTokenCollector());  
    }  
  
    private TokenCollector createTokenCollector() {  
        if (MOST_WORDS_MODE.equals(mode))  
            return new MostWordsTokenCollector();  
        if (MAX_WORD_LENGTH_MODE.equals(mode))  
            return new MaxWordLengthTokenCollector();  
        throw new Error("never happened");  
    }  	
}

 

以上代码打包为paoding4solr.jar, 和paoding-analysis.jar放到$solr.home/lib下

复制词典(dic目录)到/opt/paoding/dic

复制paoding-*.properties到classpath(例如tomcat/lib下,  放到$solr.home/lib似乎不行)

修改paoding-dic-home.properties中的paoding.dic.home=/opt/paoding/dic

 

修改$solr.home/conf/schema.xml

 

<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
        <!--<tokenizer class="solr.WhitespaceTokenizerFactory"/>-->
        <tokenizer class="com.sh2600.test.paoding.ChineseTokenizerFactory" mode="most-words"/>
        ......
    </analyzer> 
  <analyzer type="query"> 
        <!--<tokenizer class="solr.WhitespaceTokenizerFactory"/>--> 
    <tokenizer class="com.sh2600.test.paoding.ChineseTokenizerFactory" mode="most-words"/>
    ......
    </analyzer> 
</fieldType>
 

重启solr

 

执行数据导入,查询

 

参考

http://tech.ddvip.com/2009-09/1252589447132071.html

http://www.iteye.com/topic/364513

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值