mmseg4j-1.9 solr4 bug 处理

原创
2014/04/01 10:09
阅读数 357

目前 中文分词mmseg4j  在 solr4 下是不能正常工作的。
解决方法可简单了, 只是solr4 接口有点变化 。

中文分词mmseg4插件的作者 没及时的跟上"solr4 接口"变化。 虽然分词算法是对的,添加的文档不能建索引。

源码80M读是读不懂的。在源码里猜测查找 不能新建索引这个的原因,比较费劲,差点没找到,结果还是“凑巧”给找到了。

bug描述:
(1)java.lang.RuntimeException: java.lang.NoSuchMethodError: org.apache.l
ucene.analysis.Tokenizer.reset
报错信息
http://code.google.com/p/mmseg4j/issues/detail?id=31 我是在分词测试时碰到这样的错误的。
解决方法

这里的这个文件里的setReader 是新版solr4提供的。旧的接口reset 已经过期。
(2)
不能建索引 的相关描述:http://code.google.com/p/mmseg4j/issues/detail?id=38
原因:MMSegTokenizer 还是按以前版本的的solr 接口的。
          MMSegTokenizer 在solr 里是缓存的,它和词库都是启动时就缓存了。 在后续有新的的短语要分词时,就会调用这个MMSegTokenizer.reset 方法把新词传进来,传给MMSegTokenizer。 但新版solr4里已经不调用这个reset方法了(也就是上图显示的那个reset方法),而是调用setReader ,这样MMSegTokenizer 实际分词的对象mmSeg就得不到新数据。于是 我加了下面的hack 代码,让mmSeg能得到新数据。

解决方法

mmseg4j-1.9 solr4 bug 处理 - wxf4150 - 飞的博客

 
找到MMSegTokenizer.java 这个文件打开 上图 框里的内容是我新加的。 自己找到mmSeg对象加上一个ReaderStatus 属性默认值填0。
然后编译这个包。再放到solr 里去。重启tomcat 就能工作了。

这里上传不了附件, 编译后的结果我就不提交了,大家自己改吧。
不知道google 空间的代码,作者什么时间改,我们就能直接用了。


展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部