• Paoding 在 Solr 1.4 中使用


    Solr 1.4 中的 TokenizerFactory 有变化。以至旧的 solr 分词扩展不能用。它的 create 方法要求返回 Tokenizer,而 PaodingTokenizer 不是继承 Tokenizer 的。所以不太方便。因此写个包装。

    新写一个 SolrPaodingTokenizer 继承 Tokenizer,而 PaodingTokenizer 是其属性。如:

    1. package com.chenlb.solr.paoding;  
    2.   
    3. import java.io.IOException;  
    4. import java.io.Reader;  
    5.   
    6. import net.paoding.analysis.analyzer.PaodingTokenizer;  
    7. import net.paoding.analysis.analyzer.TokenCollector;  
    8. import net.paoding.analysis.knife.Knife;  
    9.   
    10. import org.apache.lucene.analysis.Token;  
    11. import org.apache.lucene.analysis.Tokenizer;  
    12.   
    13. /** 
    14.  * Solr 1.4 中使用对 PaodingTkenizer 的包装。 
    15.  * 
    16.  * @author chenlb 2009-12-18 下午 04:46:06 
    17.  */  
    18. public class SolrPaodingTokenizer extends Tokenizer {  
    19.   
    20.     private PaodingTokenizer paodingTokenizer;  
    21.   
    22.     private Knife knife;  
    23.     private TokenCollector tokenCollector;  
    24.   
    25.     public SolrPaodingTokenizer(Reader input, Knife knife, TokenCollector tokenCollector) {  
    26.         paodingTokenizer = new PaodingTokenizer(input, knife, tokenCollector);  
    27.         this.input = input;  
    28.         this.knife = knife;  
    29.         this.tokenCollector = tokenCollector;  
    30.     }  
    31.   
    32.     public Token next throws IOException {  
    33.         return paodingTokenizer.next;  
    34.     }  
    35.   
    36.     public void close throws IOException {  
    37.         paodingTokenizer.close;  
    38.     }  
    39.   
    40.     public void reset(Reader input) throws IOException {  
    41.         paodingTokenizer = new PaodingTokenizer(input, knife, tokenCollector);  
    42.         this.input = input;  
    43.     }  
    44. }  
    package com.chenlb.solr.paoding;  import java.io.IOException; import java.io.Reader;  import net.paoding.analysis.analyzer.PaodingTokenizer; import net.paoding.analysis.analyzer.TokenCollector; import net.paoding.analysis.knife.Knife;  import org.apache.lucene.analysis.Token; import org.apache.lucene.analysis.Tokenizer;  /**  * Solr 1.4 中使用对 PaodingTkenizer 的包装。  *  * @author chenlb 2009-12-18 下午04:46:06  */ public class SolrPaodingTokenizer extends Tokenizer {  	private PaodingTokenizer paodingTokenizer;  	private Knife knife; 	private TokenCollector tokenCollector;  	public SolrPaodingTokenizer(Reader input, Knife knife, TokenCollector tokenCollector) { 		paodingTokenizer = new PaodingTokenizer(input, knife, tokenCollector); 		this.input = input; 		this.knife = knife; 		this.tokenCollector = tokenCollector; 	}  	public Token next throws IOException { 		return paodingTokenizer.next; 	}  	public void close throws IOException { 		paodingTokenizer.close; 	}  	public void reset(Reader input) throws IOException { 		paodingTokenizer = new PaodingTokenizer(input, knife, tokenCollector); 		this.input = input; 	} } 

    然后再写个 PaodingTokenizerFactory,我这就不写了,下载:solr-1.4-paoding.zip

    包装 paoding 2.0.4-beta,以至可以在 solr 1.4 中使用。

    使用:

    把 apache-solr-1.4.0-paoding.war 替换 apache-solr-1.4.0.war,里面打包了 paoding-2.0.4-beta、词库、还在包装的 solr-1.4-paoding.jar

    源码在 solr-1.4-paoding-src 中,solr-1.4-paoding.jar 是在 solr 1.3 下编译的。测试过,可以在 solr 1.4 中使用。

    solr/conf 包括有 schema.xml 配置:

    1. <fieldType name="text" class="solr.TextField" positionIncrementGap="100">  
    2.     <analyzer>  
    3.         <tokenizer class="com.chenlb.solr.paoding.PaodingTokenizerFactory"/>  
    4.         <filter class="solr.LowerCaseFilterFactory"/>  
    5.     </analyzer>  
    6. </fieldType>  
    <fieldType name="text" class="solr.TextField" positionIncrementGap="100"> 	<analyzer> 		<tokenizer class="com.chenlb.solr.paoding.PaodingTokenizerFactory"/> 		<filter class="solr.LowerCaseFilterFactory"/> 	</analyzer> </fieldType> 

    如果只用 PaodingAnalyzer 不用包装也行的。如:

    1. <fieldType name="text" class="solr.TextField">  
    2.   <analyzer class="net.paoding.analysis.analyzer.PaodingAnalyzer"></analyzer>  
    3. </fieldType>  
    <fieldType name="text" class="solr.TextField">   <analyzer class="net.paoding.analysis.analyzer.PaodingAnalyzer"></analyzer> </fieldType> 
  • 相关阅读:
    MFC
    驱动学习
    Ubuntu下为Apache简单配置SSL的方法(HTTPS的实现)
    在linux下helloworld的C程序
    swift安装,linux
    gcc,cc,g++,CC的区别
    ldconfig与 /etc/ld.so.conf
    ubuntu16.04,mysql5.7重启不成功。Restarting mysql (via systemctl): mysql.serviceJob for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service"
    linux .o,.a,.so文件
    zipgateway-2-61-0的安装
  • 原文地址:https://www.cnblogs.com/wycg1984/p/1681372.html
Copyright © 2020-2023  润新知