都知道,nutch是基于lucene搜索的,而lucene是基于标准分词StandardAnalyzer的(当然还有其它自带的,效果都和StandardAnalyzer差不多),而它们的中文分词效果都不理想,也就导致索引不理想,也就导致搜索不理想,所以根在分词,只要分词好了,nutch就会有质的改变。本来是想用ICTCLAS了,但是遇到许多其它问题,最后选用IKAanalyzer作为替换分词组件,完成在myeclipse8.5+nutch1.2+IKAnalyzer3.2.3Stable.jar的集成。前两步已经完成了,就差IK集成上去了。
有两种方式可以完成,一种是源代码方式,另一种是插件方式,此处采用源代码方式,多少有点烦锁,现总结如下:
1、准备好IK分词,在CSDN或新浪ask上都需要积分,嫌麻烦,最后在google code上面下载的,很简单也很快捷,以后像这种著名些的组件都可以直接google code,没有像csdn上那么多麻烦事,呵呵。在google code直接搜"IK"就可以了,不多说了。
2、在项目中右击,build path --> add external archives -->指到你的IKAnalyzer3.2.3Stable.jar就可以了。第二点,先复制下IKAnalyzer3.2.3Stable.jar,然后找到项目根目录下的lib,粘贴进去就可以了。
3、中间最主要部分本打算自己写了,但又不想费太多时间,还是给一个相当不错的链接吧,来说明这一段,我也是按照它的做的,它的也有问题,请先按它说的搞定,之后我再详解决一下它留下的问题。
http://blog.csdn.net/jiutao_tang/article/details/6461884,其中提到的javacc编译器,在google code直接搜一下就可以了。
4、经过上边文章的部分之后,会有好像是4个相对应的Java文件需要修改,也就是多抛出一些ParseException,在ecplise环境下,很好找,我就不多说了。
5、通过前4步的话,可以正常实现在myeclipse中的console中的抓取和查询了,记得数据要重新抓取才可以(因为分词器换了,那么索引也就变了),你可以这样式一下效果,你抓的是qq的网站信息,你可以试着搜索下“腾”、”讯“、”腾讯“,前两天都没有结果,只有"腾讯"时二三十条结果,这足以说明IKAnalyzer3.2.3Stable.jar的分词效果,若是StandardAnalyzer的话,腾和讯作为搜索词时都会有相当多的结果条目。6、下面是要解决用nutch1.2提供的nutch1.2.war来实现网页搜索。显然,经过上边可知,如果依然使用最原使的nutch1.2.war是肯定不行的,因为分词和某些jar包都变了。这时需要重新ant(也就是build)一下nutch1.2项目。可如此操作
右击nutch项目-->properties-->builders-->点击右侧的new-->双击ant builder-->可以起个build名字,选择browse workspace-->选择nutch1.2对应的build.xml文件-->回到原处后,将Java builder的选项去掉,并选择新建的build置顶即点一下up就可以-->点击右下角的ok,注意此时的nutch-default.xml中的plugin.folders的值要为plugins,不能再是./src/plugin,否则搜索时会报错,说ClassNotFound。有的版本当你点了OK后,就直接ant了,有的需要你右击你的nutch项目--》选择build project来手动ant,效果是一样的。
7、这时会在你的源代码目录中多了一个build目录,将最后边的nutch-1.2.job、nutch-1.2.jar、nutch-1.2.war替换掉上一级目录中的三个文件。这样就可以直接将现在的项目放到linux上布署了,IK分词效果是实现的。
将新生成的nutch-1.2.war放到你的tomcat的webapps下,重启tomcat,然后输入对应的url地址,就可以查询了。
如果运气充分好的话应该就可以了。不行的话,肯定是小细节给丢掉了,我也是反反复复好多次之后,才算完全搞定,预祝同志们成功了。
本文最为核心的部分,就是如何解决web搜索时如何加入IK分词的问题,但由于时间和篇幅有限,就放到下一篇详细说一下吧。