您的位置:首页 > 运维架构 > Tomcat

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 比较好用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐