solr3.5.1配置IKAnalyzer中文分词器
来源:互联网 发布:php各类接口开发 编辑:程序博客网 时间:2024/03/29 02:46
一、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
如图:
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); }
其它都是一些零零碎碎的修改。可查看修改后的源文件。
新建一个工程(附件中的IK-Analyzer-extra),添加工厂类IKTokenizerFactory,方便程序的扩展和维护。
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; } }
二、整合过程
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
- solr3.5.1配置IKAnalyzer中文分词器
- solr的IKAnalyzer中文分词器配置
- 5、solr配置中文分词器(IKAnalyzer)
- IKAnalyzer 中文分词器
- IKAnalyzer 中文分词器
- IKanalyzer中文分词器
- Solr中文分词配置(IKAnalyzer)
- Solr中文分词配置(IKAnalyzer)
- IKAnalyzer中文分词器简介
- 安装中文分词器 IKAnalyzer
- Solr中文分词器配置讲解 (IKAnalyzer和mmseg4j)
- SOLR3.x配置mmseg4j分词器
- 配置solr4.10.0和中文分词IKAnalyzer
- solr6.5配置IKAnalyzer的中文分词
- 【solr】Solr中文分词配置(IKAnalyzer)
- 中文分词器扩充中文词库IKAnalyzer
- solr3.5整合tomcat并配置中文分词
- 分享IKAnalyzer 3.0 中文分词器
- Spring学习总结(2)——Spring的常用注解
- 未来开发或成智能机器时代—移动终端世纪
- 线性判别分析(LDA)与主成分分析(PCA)
- Postgresql的隐藏系统列
- CSDN网站系统升级公告
- solr3.5.1配置IKAnalyzer中文分词器
- Git Reference---Getting and Creating Projects
- 移动端图片格式调研
- ucos II API参考手册
- make_ext4fs制作system.img
- jQuery.extend 和jQuery.fn.extend的差别
- XML节点
- JAVA心德与每日笔记
- Android PullToRefresh 分析之一、初识PullToRefresh