• [ solr入门 ] 在schema.xml中加入自己的分词工具


    有时为了满足特有的需求,可能需要对现有的分词器进行调整,为了完成对这些特有分词器的配置,需要完成以下步骤。

    (基本思路和配置IKAnalyzer一致)

    1.开发特有的分词器,并继承solr中的类BaseTokenizerFactory。

    例如笔者调整了一个分词器为OBOLowercaseTokenizer

    类层次结构如下图:

    然后编写BOBSolr类,继承BaseTokenizerFactory。

    public class BOBSolr extends BaseTokenizerFactory {
    
    	@Override
    	public Tokenizer create(Reader input) {
    		return new OBOLowercaseTokenizer(input);
    	}
    
    }
    

      

    2.在schema.xml中配置

    <!-- BOB -->
    	<fieldType name="bob" class="solr.TextField">
    		<analyzer type="index">
    			<tokenizer class="com.baitengsoft.FTDB.analyzer.solr.BOBSolr" />
            </analyzer>
    		<analyzer type="query">
    			<tokenizer class="com.baitengsoft.FTDB.analyzer.solr.BOBSolr" />
            </analyzer>
    	</fieldType>
    

      

    ---------------------------------------------

    如果你的分词器有特定的参数需要在schema.xml中配置,可以参考IKAnalyzer,IKTokenizerFactory如下所述:

    /**
     * 
     */
    package org.wltea.analyzer.solr;
    
    import java.io.Reader;
    import java.util.Map;
    
    import org.apache.lucene.analysis.Tokenizer;
    import org.apache.solr.analysis.BaseTokenizerFactory;
    import org.wltea.analyzer.lucene.IKTokenizer;
    
    /**
     * 实现Solr1.4分词器接口
     * 基于IKTokenizer的实现
     * 
     * @author 林良益、李良杰
     *
     */
    public final class IKTokenizerFactory extends BaseTokenizerFactory{
    	
    	private boolean isMaxWordLength = false;
    	
    	/**
    	 * IK分词器Solr TokenizerFactory接口实现类
    	 * 默认最细粒度切分算法
    	 */
    	public IKTokenizerFactory(){
    	}
    	
    	/*
    	 * (non-Javadoc)
    	 * @see org.apache.solr.analysis.BaseTokenizerFactory#init(java.util.Map)
    	 */
    	public void init(Map<String,String> args){
    		String _arg = args.get("isMaxWordLength");
    		isMaxWordLength = Boolean.parseBoolean(_arg);
    	}
    	
    	/*
    	 * (non-Javadoc)
    	 * @see org.apache.solr.analysis.TokenizerFactory#create(java.io.Reader)
    	 */
    	public Tokenizer create(Reader reader) {
    		return new IKTokenizer(reader , isMaxWordLength());
    	}
    
    	public void setMaxWordLength(boolean isMaxWordLength) {
    		this.isMaxWordLength = isMaxWordLength;
    	}
    
    	public boolean isMaxWordLength() {
    		return isMaxWordLength;
    	}
    
    }
    

      isMaxWordLength为其特有的参数。

  • 相关阅读:
    VS 2010 制作 Windows Service 安装包
    Postback 之后保持浏览器滚动条的位置
    Stream之list转map及问题解决
    List.sort()排序功能
    The content of element type "resultMap"
    MyBatis 一对一,一对多,多对多
    Java Array、List、Set互相转化
    Java流(Stream)操作实例-筛选、映射、查找匹配
    JAVA系列笔记十八之nohup实现后台运行程序
    VSCode汇总
  • 原文地址:https://www.cnblogs.com/huangfox/p/2342944.html
Copyright © 2020-2023  润新知