lucene应用心得以及几种中文分词器的使用比对
2011-06-16 19:47
483 查看
lucene应用心得以及几种中文分词器的使用比对:
1、创建索引和关键字搜索在不同的系统中运行出现的问题
如果将创建索引和关键字搜索分别写在后台和前台系统,然后分别将这两套系统部署在同一个应用服务器下面( 如同一个tomcat6.0),在会出现一下现象:,(a)当点击后台的创建索引,运行正常,这时,在点击前台的关键词搜索则就报异常 (b)点击前台的搜索(之前已经创建好索引),运行正常,这时,在后台点击创建索引。在(a)(b)这两种情况下都出现异常:
“java.lang.OutOfMemoryError: Java heap space” ,异常信息如下 :
2011-6-1 14:34:00 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet springmvc threw exception
java.lang.OutOfMemoryError: Java heap space
at org.wltea.analyzer.dic.DictSegment.fillSegment(DictSegment.java:167)
at org.wltea.analyzer.dic.DictSegment.fillSegment(DictSegment.java:180)
at org.wltea.analyzer.dic.DictSegment.fillSegment(DictSegment.java:180)
at org.wltea.analyzer.dic.DictSegment.fillSegment(DictSegment.java:180)
at org.wltea.analyzer.dic.DictSegment.fillSegment(DictSegment.java:156)
at org.wltea.analyzer.dic.Dictionary.loadMainDict(Dictionary.java:97)
at org.wltea.analyzer.dic.Dictionary.<init>(Dictionary.java:71)
at org.wltea.analyzer.dic.Dictionary.<clinit>(Dictionary.java:41)
at org.wltea.analyzer.cfg.Configuration.loadSegmenter(Configuration.java:110)
at org.wltea.analyzer.IKSegmentation.<init>(IKSegmentation.java:54)
at org.wltea.analyzer.lucene.IKTokenizer.<init>(IKTokenizer.java:44)
at org.wltea.analyzer.lucene.IKAnalyzer.tokenStream(IKAnalyzer.java:45)
at org.apache.lucene.analysis.Analyzer.reusableTokenStream(Analyzer.java:52)
at org.apache.lucene.index.DocInverterPerField.processFields(DocInverterPerField.java:126)
at org.apache.lucene.index.DocFieldProcessorPerThread.processDocument(DocFieldProcessorPerThread.java:246)
at org.apache.lucene.index.DocumentsWriter.updateDocument(DocumentsWriter.java:773)
at org.apache.lucene.index.DocumentsWriter.addDocument(DocumentsWriter.java:751)
at org.apache.lucene.index.IndexWriter.addDocument(IndexWriter.java:1928)
at org.apache.lucene.index.IndexWriter.addDocument(IndexWriter.java:1902)
at com.fasdq.fangdake.index.IndexNews.buildDocument(IndexNews.java:210)
at com.fasdq.fangdake.index.IndexNews.createIndexIKAnalyzer(IndexNews.java:55)
故经各方面分析以及测试得出结论:创建索引,和关键字搜索在两个系统中的时候,要分开部署在两个tomcat下面,这样子就不会出现任何问题。
2、几种中文分析器的分析(PaodingAnalyzer IKAnalyzer):
/**
* 分词器比较:
* PaodingAnalyzer IKAnalyzer
* 1)关键字为"海淀 区"时候
* PaodingAnalyzer:' body:海淀 body:区 '
* IKAnalyzer:' (body:海淀 body:区) '
* 两者都可以搜到"6:海淀北京你好"
* 2)关键字为"海淀区"时候
* PaodingAnalyzer:' body:"海淀 海淀区" '
* IKAnalyzer:' (body:海淀区 body:海淀 body:淀区) '
* 仅有IKAnalyzer可以搜到"6:海淀北京你好"
*/
此外还测试过mmseg4j-1.8.2分词器,结果和PaodingAnalyzer 类似,但是分词结果并没有PaodingAnalyzer 多,如:
"山东北京" mmseg4j-1.8.2分词后是:"山东 北京" ,而PaodingAnalyzer 则是:"山东 东北 北京" 。但是庖丁解牛分析器配置比较复杂。
经过以上实验,感觉IKAnalyzer 比较好用。
1、创建索引和关键字搜索在不同的系统中运行出现的问题
如果将创建索引和关键字搜索分别写在后台和前台系统,然后分别将这两套系统部署在同一个应用服务器下面( 如同一个tomcat6.0),在会出现一下现象:,(a)当点击后台的创建索引,运行正常,这时,在点击前台的关键词搜索则就报异常 (b)点击前台的搜索(之前已经创建好索引),运行正常,这时,在后台点击创建索引。在(a)(b)这两种情况下都出现异常:
“java.lang.OutOfMemoryError: Java heap space” ,异常信息如下 :
2011-6-1 14:34:00 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet springmvc threw exception
java.lang.OutOfMemoryError: Java heap space
at org.wltea.analyzer.dic.DictSegment.fillSegment(DictSegment.java:167)
at org.wltea.analyzer.dic.DictSegment.fillSegment(DictSegment.java:180)
at org.wltea.analyzer.dic.DictSegment.fillSegment(DictSegment.java:180)
at org.wltea.analyzer.dic.DictSegment.fillSegment(DictSegment.java:180)
at org.wltea.analyzer.dic.DictSegment.fillSegment(DictSegment.java:156)
at org.wltea.analyzer.dic.Dictionary.loadMainDict(Dictionary.java:97)
at org.wltea.analyzer.dic.Dictionary.<init>(Dictionary.java:71)
at org.wltea.analyzer.dic.Dictionary.<clinit>(Dictionary.java:41)
at org.wltea.analyzer.cfg.Configuration.loadSegmenter(Configuration.java:110)
at org.wltea.analyzer.IKSegmentation.<init>(IKSegmentation.java:54)
at org.wltea.analyzer.lucene.IKTokenizer.<init>(IKTokenizer.java:44)
at org.wltea.analyzer.lucene.IKAnalyzer.tokenStream(IKAnalyzer.java:45)
at org.apache.lucene.analysis.Analyzer.reusableTokenStream(Analyzer.java:52)
at org.apache.lucene.index.DocInverterPerField.processFields(DocInverterPerField.java:126)
at org.apache.lucene.index.DocFieldProcessorPerThread.processDocument(DocFieldProcessorPerThread.java:246)
at org.apache.lucene.index.DocumentsWriter.updateDocument(DocumentsWriter.java:773)
at org.apache.lucene.index.DocumentsWriter.addDocument(DocumentsWriter.java:751)
at org.apache.lucene.index.IndexWriter.addDocument(IndexWriter.java:1928)
at org.apache.lucene.index.IndexWriter.addDocument(IndexWriter.java:1902)
at com.fasdq.fangdake.index.IndexNews.buildDocument(IndexNews.java:210)
at com.fasdq.fangdake.index.IndexNews.createIndexIKAnalyzer(IndexNews.java:55)
故经各方面分析以及测试得出结论:创建索引,和关键字搜索在两个系统中的时候,要分开部署在两个tomcat下面,这样子就不会出现任何问题。
2、几种中文分析器的分析(PaodingAnalyzer IKAnalyzer):
/**
* 分词器比较:
* PaodingAnalyzer IKAnalyzer
* 1)关键字为"海淀 区"时候
* PaodingAnalyzer:' body:海淀 body:区 '
* IKAnalyzer:' (body:海淀 body:区) '
* 两者都可以搜到"6:海淀北京你好"
* 2)关键字为"海淀区"时候
* PaodingAnalyzer:' body:"海淀 海淀区" '
* IKAnalyzer:' (body:海淀区 body:海淀 body:淀区) '
* 仅有IKAnalyzer可以搜到"6:海淀北京你好"
*/
此外还测试过mmseg4j-1.8.2分词器,结果和PaodingAnalyzer 类似,但是分词结果并没有PaodingAnalyzer 多,如:
"山东北京" mmseg4j-1.8.2分词后是:"山东 北京" ,而PaodingAnalyzer 则是:"山东 东北 北京" 。但是庖丁解牛分析器配置比较复杂。
经过以上实验,感觉IKAnalyzer 比较好用。
相关文章推荐
- lucene集成ikanalyzer中文分词器插件;Analyzer使用时机
- Lucene的几种中文分词器的比较
- Lucene2.0中使用基于词典的中文分词器建立索引
- JAVA_WEB项目之Lucene使用中文分词器IKAnalyzer3.2.8
- 11大Java开源中文分词器的使用方法和分词效果对比,当前几个主要的Lucene中文分词器的比较
- [导入]Paoding中文分词器使用总结(Lucene)
- 11大Java开源中文分词器的使用方法和分词效果对比,当前几个主要的Lucene中文分词器的比较
- lucene使用IKAnalyzer3.2.5中文分词器进行索引的一个小例子
- 真分布式SolrCloud+Zookeeper+tomcat搭建、索引Mysql数据库、IK中文分词器配置以及web项目中solr的应用(1)
- solr 7+tomcat 8 + mysql实现solr 7基本使用(安装、集成中文分词器、定时同步数据库数据以及项目集成)
- android应用崩溃分析开源工具acra研究以及使用心得
- 单例模式(Singleton )的几种用法以及使用条件
- 当前几个主要的Lucene中文分词器的比较
- JMS(Jboss Messaging)的一点使用心得(六)Messaging扩展应用-Message Bridge
- 使用nRF51822/nRF51422创建一个简单的BLE应用 ---入门实例手册(中文)之三
- nginx反向代理,动静态请求分离,以及nginx缓存应用,以及使用ngx_cache_purge清除指定URL
- 使用Eclipse开发php应用,中文提示乱码怎么办
- lucene 中文分词器中的一个Bug
- 【Java】Java中文分词器Ansj的使用
- [原]SWFObject FAQ 使用swfobject以及flash的注意事项 中文翻译版