中文分詞裡IKAnalyzer和結巴是大家比較常用的分詞器, 不過IKAnalyzer已經很久沒有更新了, IKAnalyzer中文分词器V2012使用手册也跟IK Analyer 2012-FF Hotfix 1對不起來。我自己觀察的結果是

  1. IKAnalyzer中文分词器V2012使用手册是IK Analyer 2012 upgrade 6的使用手册, 不是IK Analyer 2012-FF Hotfix 1的使用手册
  2. IK Analyer 2012 upgrade 6支援Lucene 3.X API, 不支援Lucene 4.X API
  3. IK Analyer 2012-FF Hotfix 1支援Lucene 4.X API, 不支援Lucene 5.X API
  4. 如果你硬要在Solr 5.1.0上使用IK Analyer 2012-FF Hotfix 1, 會產生下列錯誤訊息

  1. java.lang.AbstractMethodError
  2. at org.apache.lucene.analysis.AnalyzerWrapper.createComponents(AnalyzerWrapper.java:101)
  3. at org.apache.lucene.analysis.AnalyzerWrapper.createComponents(AnalyzerWrapper.java:101)
  4. at org.apache.lucene.analysis.Analyzer.tokenStream(Analyzer.java:179)
  5. at org.apache.lucene.document.Field.tokenStream(Field.java:556)
  6. at org.apache.lucene.index.DefaultIndexingChain$PerField.invert(DefaultIndexingChain.java:606)
  7. at org.apache.lucene.index.DefaultIndexingChain.processField(DefaultIndexingChain.java:344)
  8. at org.apache.lucene.index.DefaultIndexingChain.processDocument(DefaultIndexingChain.java:300)
  9. at org.apache.lucene.index.DocumentsWriterPerThread.updateDocument(DocumentsWriterPerThread.java:232)
  10. at org.apache.lucene.index.DocumentsWriter.updateDocument(DocumentsWriter.java:458)
  11. at org.apache.lucene.index.IndexWriter.updateDocument(IndexWriter.java:1350)
  12. at org.apache.solr.update.DirectUpdateHandler2.addDoc0(DirectUpdateHandler2.java:239)
  13. at org.apache.solr.update.DirectUpdateHandler2.addDoc(DirectUpdateHandler2.java:163)
  14. at org.apache.solr.update.processor.RunUpdateProcessor.processAdd(RunUpdateProcessorFactory.java:69)
  15. at org.apache.solr.update.processor.UpdateRequestProcessor.processAdd(UpdateRequestProcessor.java:51)
  16. at org.apache.solr.update.processor.DistributedUpdateProcessor.doLocalAdd(DistributedUpdateProcessor.java:947)
  17. at org.apache.solr.update.processor.DistributedUpdateProcessor.versionAdd(DistributedUpdateProcessor.java:1102)
  18. at org.apache.solr.update.processor.DistributedUpdateProcessor.processAdd(DistributedUpdateProcessor.java:703)
  19. at org.apache.solr.update.processor.LogUpdateProcessor.processAdd(LogUpdateProcessorFactory.java:104)
  20. at org.apache.solr.handler.loader.XMLLoader.processUpdate(XMLLoader.java:250)
  21. at org.apache.solr.handler.loader.XMLLoader.load(XMLLoader.java:177)
  22. at org.apache.solr.handler.UpdateRequestHandler$1.load(UpdateRequestHandler.java:103)
  23. at org.apache.solr.handler.ContentStreamHandlerBase.handleRequestBody(ContentStreamHandlerBase.java:74)
  24. at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:143)
  25. at org.apache.solr.core.SolrCore.execute(SolrCore.java:1984)
  26. at org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:829)
  27. at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:446)
  28. at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:220)
  29. at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1419)
  30. at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:455)
  31. at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)
  32. at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:557)
  33. at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)
  34. at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1075)
  35. at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:384)
  36. at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)
  37. at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1009)
  38. at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
  39. at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:255)
  40. at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:154)
  41. at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
  42. at org.eclipse.jetty.server.Server.handle(Server.java:364)
  43. at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:489)
  44. at org.eclipse.jetty.server.BlockingHttpConnection.handleRequest(BlockingHttpConnection.java:53)
  45. at org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:953)
  46. at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:1014)
  47. at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:953)
  48. at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)
  49. at org.eclipse.jetty.server.BlockingHttpConnection.handle(BlockingHttpConnection.java:72)
  50. at org.eclipse.jetty.server.bio.SocketConnector$ConnectorEndPoint.run(SocketConnector.java:264)
  51. at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
  52. at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
  53. at java.lang.Thread.run(Thread.java:745)

另外在IK Analyer 2012-FF Hotfix 1, IKTokenizerFactory被拿掉了, 如果你要在schema.xml裡使用filter element, 就會用到IKTokenizerFactory, 語法類似

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  1. <fieldType name="text_ik" class="solr.TextField">
  2. <analyzer type="index">
  3. <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" />
  4. <filter class="solr.LowerCaseFilterFactory" min="0" max="32764" />
  5. </analyzer>
  6. <analyzer type="query">
  7. <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" />
  8. <filter class="solr.LengthFilterFactory" min="2" max="7" />
  9. </analyzer>
  10. </fieldType>

當然如果你沒有要使用任何的filters, 是可以不需要IKTokenizerFactory, 語法可以簡化成

  1. 1
  2. 2
  3. 3
  4. 4
  1. <fieldType name="text_ik" class="solr.TextField">
  2. <analyzer type="index" useSmart="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
  3. <analyzer type="query" useSmart="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
  4. </fieldType>

在程式碼的差異上, Tokenizer的constructor不需要再提供input reader當參數, Analyzer class的createComponents method也不需要再提供input reader當參數,TokenizerFactory也是不再使用input reader當參數。

詳細source code請到https://github.com/EugenePig/ik-analyzer-solr5下載

Posted by EugenePig Jun 5th, 2015 12:38 pm  nlpnutchsolr/lucene

Build IKAnalyzer With Solr 5.1.0的更多相关文章

  1. solr&lucene3.6.0源码解析(一)

      本文作为系列的第一篇,主要描述的是solr3.6.0开发环境的搭建   首先我们需要从官方网站下载solr的相关文件,下载地址为http://archive.apache.org/dist/luc ...

  2. solr&lucene3.6.0源码解析(三)

    solr索引操作(包括新增 更新 删除 提交 合并等)相关UML图如下 从上面的类图我们可以发现,其中体现了工厂方法模式及责任链模式的运用 UpdateRequestProcessor相当于责任链模式 ...

  3. solr 4.3.0 配置

    scheme.xml <?xml version="1.0" encoding="UTF-8" ?> <schema name="t ...

  4. Apache solr 6.6.0安装

    Apache solr 6.6.0安装 最近使用了Apache solr搜索引擎框架,solr是基于lucene的一个搜索服务器,lucene也是Apache的一个开源项目:对于学习搜索引擎来说,这个 ...

  5. solr&lucene3.6.0源码解析(四)

    本文要描述的是solr的查询插件,该查询插件目的用于生成Lucene的查询Query,类似于查询条件表达式,与solr查询插件相关UML类图如下: 如果我们强行将上面的类图纳入某种设计模式语言的话,本 ...

  6. EasyNet.Solr 4.4.0发布及例子

    EasyNet.Solr 4.4.0发布及例子 EasyNet.Solr 4.4.0已经发布,可以直接从http://easynet.codeplex.com/ 下载试用并反馈.最新版本进行了以下改动 ...

  7. Solr 5.5.0 + tomcat 7.0.69 + zookeeper-3.4.6 Cloud部署

    Solr介绍:Solr是一个独立的企业级搜索应用服务器,Solr基于Lucene的全文搜索服务器,同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置.可扩展并对查询性能进行了 ...

  8. solr 5.1.0安装-Windows(亦可用于5.4.1)

    以前4.10的时候写过一个安装教程,是安装在tomcat的,在来安装5.1的时候,看了下简介,发现从5.x后solr集成了jetty,安装变得简单了不少. 现在只需要三步就能搞定,下载solr包解压, ...

  9. solr&lucene3.6.0源码解析(二)

    上文描述了solr3.6.0怎么采用maven管理的方式在eclipse中搭建开发环境,在solr中,为了提高搜索性能,采用了缓存机制,这里描述的是LRU缓存,这里用到了 LinkedHashMap类 ...

随机推荐

  1. 算法笔记_195:历届试题 错误票据(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 某涉密单位下发了某种票据,并要在年终全部收回. 每张票据有唯一的ID号.全年所有票据的ID号是连续的,但ID的开始数码是随机选定的. 因为 ...

  2. JavaScript 复制内容到剪贴板

    <html> <head> <title>Selector</title> <script language="javascript&q ...

  3. jQuery知识集锦

      CreateTime--2017年2月16日14:00:22Author:MarydonjQuery知识集锦1.empty()与remove()的区别 <select id="ty ...

  4. 〖Linux〗build sqlite3 for Arm

    Version: sqlite-autoconf-3080100.tar.gz Download: https://www.sqlite.org/download.html 1. toolchains ...

  5. TCP并发server模型(三)

    本篇博客讲述的是单client单线程模型,该模型相同由主进程统一accept,仅仅是将fork改为了pthread_create. 与进程相比,线程有非常多长处(速度快,占用资源少.数据能够共享). ...

  6. webservice系统学习笔记5-手动构建/发送/解析SOAP消息

    手动拼接SOAP消息调用webservice SOAP消息的组成: 1.创建需要发送的SOAP消息的XML(add方法为例子) /** * 创建访问add方法的SOAP消息的xml */ @Test ...

  7. 使用loadrunner对https协议(单双向SSL)的web端性能测试 (转)

    1.项目背景 1.1 单双向SSL的含义及部署 单向SSL即我们说到的https协议. 特点是,浏览器需要请求验证服务器证书: 基本含义是:一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务 ...

  8. 微信小程序的零食商城

    概述 这是一个微信小程序的商城应用,功能包括了首页.分类.购物车.个人中心.商品列表.商品详情.订单.地址管理等 详细 代码下载:http://www.demodashi.com/demo/10353 ...

  9. Android基于TCP的局域网聊天通信

    概述 在同一局域网内,两台设备通过TCP进行通信聊天. 详细 代码下载:http://www.demodashi.com/demo/10567.html 一.准备工作 开发环境 jdk1.8 Ecli ...

  10. 流动的推荐系统——兴趣Feed技术架构与实现

    流动的推荐系统 我们经常谈论的推荐系统(Recommender System),从形式上看是比较“静态”的推荐,通常位于网页主要信息的周边,比如电商网站的“看了又看”.“买了又买”.这种推荐系统在大多 ...