Coin163

首页 > solr3.5.1配置IKAnalyzer中文分词器

solr3.5.1配置IKAnalyzer中文分词器

相关标签: ikanalyzer 配置 solr

2020腾讯云“6.18”活动开始了!!!(巨大优惠重现!4核8G,5M带宽 1999元/3年),
地址https://cloud.tencent.com/act/cps/redirect?redirect=1059

2020阿里云最低价产品入口,含代金券(新老用户有优惠),
入口地址https://www.aliyun.com/minisite/goods

相关推荐:solr4.5部署到tomcat以及solr4.5配置中文分词器mmseg4j

solr4.5部署到tomcat solr默认自带了jetty服务器,但我们习惯了tomcat,我们通过以下步骤将solr部署到tomcat 1、solr.4.5.0.zip解压到指定的目录中,如d:/solr-4.5.0 2、将d:/solr-4.5.0/example/webapps下的solr.war拷贝到tomcat–>weapps中 3、新建文件夹d:

一、Solr是一个基于Lucene的Java搜索引擎服务器。Solr 提供了层面搜索、命中醒目显示并且支持多种输出格式(包括 XML/XSLT 和 JSON 格式)。它易于安装和配置,而且附带了一个基于HTTP 的管理界面。Solr已经在众多大型的网站中使用,较为成熟和稳定。Solr 包装并扩展了Lucene,所以Solr的基本上沿用了Lucene的相关术语。更重要的是,Solr 创建的索引与 Lucene搜索引擎库完全兼容。通过对Solr 进行适当的配置,某些情况下可能需要进行编码,Solr 可以阅读和使用构建到其他 Lucene 应用程序中的索引。此外,很多 Lucene 工具(如Nutch、Luke)也可以使用Solr 创建的索引。 

solr默认是不支持中文分词的,这样就需要我们手工配置中文分词器,在这里我们选用IK Analyzer中文分词器。

IK Analyzer下载地址:https://code.google.com/p/ik-analyzer/downloads/list

如图:

但是用下载的这个分词器jar包有问题,配置到solr3.5.1后出现下面的问题

java.lang.AbstractMethodError
    at org.apache.lucene.analysis.Analyzer.tokenStream(Analyzer.java:179)
    at org.apache.solr.handler.AnalysisRequestHandlerBase.analyzeValue(AnalysisRequestHandlerBase.java:91)
    at org.apache.solr.handler.FieldAnalysisRequestHandler.analyzeValues(FieldAnalysisRequestHandler.java:221)
    at org.apache.solr.handler.FieldAnalysisRequestHandler.handleAnalysisRequest(FieldAnalysisRequestHandler.java:182)
    at org.apache.solr.handler.FieldAnalysisRequestHandler.doAnalysis(FieldAnalysisRequestHandler.java:102)
    at org.apache.solr.handler.AnalysisRequestHandlerBase.handleRequestBody(AnalysisRequestHandlerBase.java:63)
    at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:143)
    at org.apache.solr.core.SolrCore.execute(SolrCore.java:2068)
    at org.apache.solr.servlet.HttpSolrCall.execute(HttpSolrCall.java:669)
    at org.apache.solr.servlet.HttpSolrCall.call(HttpSolrCall.java:462)
    at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:214)
    at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:179)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625)
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2522)
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2511)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)

一开始以为是配置问题,怎么配都不行。后来看了下源码,发现solr5.3.1中 Luecene的Analyzer接口的createComponents方法把第二个参数去掉了。因此修改源码是在所难免了。源码的修改可参考:http://iamyida.iteye.com/blog/2193513。也可以直接获取改好的源码重新打包即可。

  主要修改部分、IKAnalyzer.java

/** 
     * 重载Analyzer接口,构造分词组件 
     */  
    @Override  
    protected TokenStreamComponents createComponents(String text) {  
        Reader reader = new BufferedReader(new StringReader(text));  
        Tokenizer _IKTokenizer = new IKTokenizer(reader , this.useSmart());  
        return new TokenStreamComponents(_IKTokenizer);  
    } 

  IKTokenizer.java中添加如下构造函数

    public IKTokenizer(AttributeFactory factory, boolean useSmart) {  
        super(factory);  
        offsetAtt = addAttribute(OffsetAttribute.class);  
        termAtt = addAttribute(CharTermAttribute.class);  
        typeAtt = addAttribute(TypeAttribute.class);  
        _IKImplement = new IKSegmenter(input , useSmart);  
    }

  其它都是一些零零碎碎的修改。可查看修改后的源文件。

相关推荐:【Apache Solr系列】使用IKAnalyzer中文分词以及自定义分词字典 - 博客频道 - CSDN.NET

之前写的Apache Solr只介绍了简单的搭建以及导入数据等功能,最近由于项目要求,添加索引分词和搜索分词功能;分词的项目有包括好几个:smartcn、ictclas4j、IK、jeasy、庖丁、mmseg4j; 以上几种分词器各有优缺点,根据不同场景可分可定制和不可定制两种:

  新建一个工程(附件中的IK-Analyzer-extra),添加工厂类IKTokenizerFactory,方便程序的扩展和维护。

package org.wltea.analyzer.util;
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;

public class IKTokenizerFactory extends TokenizerFactory {
    private boolean useSmart;  

    public IKTokenizerFactory(Map<String, String> args) {  
        super(args);  
        useSmart = getBoolean(args, "useSmart", false);  
    }  
  
    @Override  
    public Tokenizer create(AttributeFactory attributeFactory) {  
        Tokenizer tokenizer = new IKTokenizer(attributeFactory,useSmart);  
        return tokenizer;  
    } 

}
修改过后的分词器jar包在下面链接里。


二、整合过程

1、将链接里的两个jar包复制到D:\apache-tomcat-8.0.28\webapps\solr\WEB-INF\lib下

2、将stopword.dic和IKAnalyzer.cfg.xml这两个文件复制到D:\apache-tomcat-8.0.28\webapps\solr\WEB-INF\classes下

3、在文件D:\solr_home\solr\mysolr\conf\scheme.xml中加入下面配置

复制代码
    <fieldType name="text_ik" class="solr.TextField">
      <!--索引时候的分词器-->
      <analyzer type="index">
        <tokenizer class="org.wltea.analyzer.util.IKTokenizerFactory" useSmart="true"/>
      </analyzer>
      <!--查询时候的分词器-->
      <analyzer type="query">
        <tokenizer class="org.wltea.analyzer.util.IKTokenizerFactory" useSmart="false"/>
      </analyzer>
    </fieldType>
复制代码

链接地址:http://pan.baidu.com/s/1nuqjLVz



原文

一、Solr是一个基于Lucene的Java搜索引擎服务器。Solr 提供了层面搜索、命中醒目显示并且支持多种输出格式(包括 XML/XSLT 和 JSON 格式)。它易于安装和配置,而且附带了一个基于HTTP 的管理界

------分隔线----------------------------