solr整合paoding

本文详细介绍了如何使用自定义分词器(Paoding)封装Solr的搜索逻辑,包括下载和解压分词器、配置环境变量、修改Solr schema.xml以实现中文分词,并最终通过重启Tomcat验证效果。此过程涉及Solr、Paoding等技术,旨在优化中文搜索体验。

1.         下载 paoding-analysis-2.0.4-beta.zip

http://code.google.com/p/paoding/downloads/list  

2.         解压压缩包至 paoding-analysis-2.0.4-beta

3.         设置 paodinghome 环境变量:

l         paoding-analysis-2.0.4-beta 中的 dic 文件夹考到 solrhome 文件夹中

l         进入 paoding-analysis-2.0.4-beta 找到 paoding-analysis.jar ,将其考到 tomcat/webapps/solr/solr/WEB-INF/lib

l         解压 paoding-analysis.jar ,找到文件 paoding-dic-home.properties ,更改属性如下:

paoding.dic.home=D:/solr/solr/dic D:/solr/solrsolrhome 目录)

l         重新编译打包成 paoding-analysis.jar

4.         封装 paoding     

package org.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.TokenStream;

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( (String) args.get( "mode" ));

    }

    public TokenStream 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" );

    }

 }

 

 

注:其中需要的包为 solr.war 中的 lib 库和庖丁文件包中的 paoding-analysis.jar

将以上代码打包为 paoding.jar(附件中可下载), 考到t omcat/webapps/solr/solr/WEB-INF/lib 下。

 

5.         找到 solr home 目录下的 conf (即 D:"solr"solr"conf )中的 schema.xml, 做如下修改:

 

 

<fieldType  name ="text"  class ="solr.TextField"  positionIncrementGap ="100" >   

      <analyzer  type ="index" >   

        <!--<tokenizer class="solr.WhitespaceTokenizerFactory"/>-->  

        <tokenizer  class =" org.paoding.ChineseTokenizerFactory "  mode ="most-words" />   

      ··· ···   

      </analyzer>   

      <analyzer  type ="query" >   

         <!--<tokenizer class="solr.WhitespaceTokenizerFactory"/>-->  

         <tokenizer      class =" org.paoding.ChineseTokenizerFactory "  mode ="most-words" />     

        ··· ···   

      </analyzer>   

</fieldType>   

其中 <!-- --> 里面的为原来默认的内容

 

6. 重启 tomcat 即可。进行测试 http://localhost:8888/solr/admin/analysis.jsp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值