zoukankan      html  css  js  c++  java
  • Solr4.10.2的IK Analyzer分词器配置

    原文地址:http://blog.csdn.net/fyfmfof/article/details/42122435

    1. 准备工作

    Solr4.10.2已经在Tomcat中配置好,详见Solr4.10.2的Tomcat配置

    2. 下载IK分词器

    地址:http://code.google.com/p/ik-analyzer/downloads/list
    下载IK Analyzer2012FF_hf1.zip和IK Analyzer2012 FF_SRC.rar两个文件

    3. 解压IK Analyzer 2012FF_hf1.zip将jar包拷贝到之前配置的serverWEB-INFlib目录下

    4. 修改homecollection1conf目录下的schema.xml文件

    找一个合适的地方加入配置语句:

    <!--IK-->
    <fieldType name="text_ik" class="solr.TextField">
           <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
    </fieldType>

    5. 启动Tomcat服务器访问http://localhost:8080/solr在Analysis中测试分词效果如下:

    这里写图片描述

    6. IKAnalzer默认采用最细粒度切分,如果要配合索引和搜索一般我们希望索引采用最细粒度切分,而搜索采用智能切分,按照说明配置如下:

    <!--IK-->
    <fieldType name="text_ik" class="solr.TextField">
                  <analyzer type="index" class="org.wltea.analyzer.lucene.IKAnalyzer" useSmart="false"/>
                  <analyzer type="query" class="org.wltea.analyzer.lucene.IKAnalyzer" useSmart="true"/>
    </fieldType> 

    但配置启动后发现分词结果还是一样都采用了最细粒度切分,所以我们要手动解决这个问题,在网上找了一些资料尝试后发现一个有效的方法,这里就用到我们下载的第二个文件,即IK Analyzer 2012 FF_SRC源文件,解压后用Eclipse创建新Maven Project的方式将其打开。

    7. 新建一个org.apache.solr.analysis包,然后建一个IKAnalyzerSolrTokenizerFactory类,代码如下:

    package org.apache.solr.analysis;
    
    import java.io.Reader;
    import java.util.Map;
    
    import org.apache.lucene.analysis.Tokenizer;
    import org.apache.lucene.analysis.util.TokenizerFactory;
    import org.apache.lucene.util.AttributeFactory;
    import org.wltea.analyzer.lucene.IKTokenizer;
    
    /**
    
     * 解决IK Analyzer 2012FF_hf1 在solr4.x应用时,配置useSmart失效的问题
    
     * 
    
     * @author  lqin
    
     * @date 2013-12-24
    
     * @email  qin.liang@sinovatio.com
    
     * @version  1.0
    
     * 
    
     */
    
    public class IKAnalyzerSolrTokenizerFactory extends TokenizerFactory {
    
        /**
    
         * 构造函数,从参数里面读取配置
    
         * @param args
    
         */
    
        public IKAnalyzerSolrTokenizerFactory(Map<String, String> args) 
        {
            super(args);
            assureMatchVersion();
            // 设置分词力度,useSmart=true粗力度,useSmart=false细力度
            this.setUseSmart("true".equals(args.get("useSmart")));
        }
    
        private boolean useSmart;
    
        public boolean useSmart() 
        {
            return useSmart;
        }
    
        public void setUseSmart(boolean useSmart) 
        {
            this.useSmart = useSmart;
        }
    
        public void init(Map<String, String> args) {
            this.useSmart = "true".equals(args.get("useSmart")) ;
        }
    
        @Override
    
        public Tokenizer create(AttributeFactory factory, Reader input) 
        {
            Tokenizer _IKTokenizer = new IKTokenizer(input , this.useSmart);
            return _IKTokenizer;
        }
    }

    8. 利用MyEclipse的导出功能直接打包成jar包拷贝到serverWEB-INFlib目录下

    9. 将之前schema.xml里IK的配置改为:

    <fieldType name="text_ik" class="solr.TextField">
           <analyzer type="index">
                  <tokenizer class="org.apache.solr.analysis.IKAnalyzerSolrTokenizerFactory" useSmart="false"/>
           </analyzer>
           <analyzer type="query">
                  <tokenizer class="org.apache.solr.analysis.IKAnalyzerSolrTokenizerFactory" useSmart="true"/>
           </analyzer>
    </fieldType>

    10. 重新启动Tomcat,测试如下即表示配置完成:

    这里写图片描述

    11. Solr4.10.2中文分词配置出错补充:

    尝试过程中遇到的问题基本都是版本问题,solr版本直接对分词的改动还是挺大的,要找到一个合适的分词器和合适版本的solr还真是不容易。

    这里写图片描述
    这里写图片描述
    如果使用其他版本solr或者分词器进行配置的时候遇到上面的几个情况基本可以考虑更换solr版本或者分词器版本什么的,或者根据相应版本的规则自己动手写适配接口

  • 相关阅读:
    python-全局变量是否使用global总结
    python-多线程创建以及查看
    python-tcp客户端
    python-udp聊天器
    python-udp接受数据
    python-udp发送数据
    python-正则表达式总结
    JAVA程序员面试必知32个知识点
    计算机专业英语基础篇
    非常经典有深度的电影英文台词
  • 原文地址:https://www.cnblogs.com/wygdove/p/4542102.html
Copyright © 2011-2022 走看看