Nutch1.2在Windows下elipse的配置说明

个人环境:Windows XP+JDK1.6+Eclipse3.7+Nutch1.2+Cygwin+Tomcat7.0+ant1.8.3+Javacc5.0+Luke

环境说明:

<1> Nutch1.2而非1.4,主要因为1.4的学习资料少且生成的crawl目录下没有index目录,不利于Luke中文分词的查看

<2> Nutch是开源的搜索引擎,Java语言编写,故其运行环境需要JDK的支持

<3> Nutch运行在Linux上,Windows下需要Cygwin模拟Linux环境

<4> Java开发采用Eclipse开发工具

<5> 运行Tomcat Web服务器搭建可视化的搜索平台

<6> ant重建工程

<7> Javacc编译Java源码

<8> Luke查看中文分词

一、准备

JDK1.6下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html

Eclipse3.7下载地址:http://www.eclipse.org/

Nutch1.2下载地址:http://apache.etoak.com//nutch/apache-nutch-1.2-bin.zip

Cygwin下载地址:http://www.cygwin.com/

Tomcat7.0下载地址:http://tomcat.apache.org/

ant1.8.3下载地址:http://ant.apache.org/bindownload.cgi

Javacc5.0下载地址:http://javacc.java.net/

Luke:下载地址http://www.getopt.org/luke/

二、步骤

(1)JDK安装简单,最后配置好环境变量Path,在命令行下用 java -version 能够查看版本信息说明安装成功;Tomcat下载绿色版,无需安装,配置好环境变量Path。

二者详细配置参考:http://blog.csdn.net/cailibiao/article/details/7608952

(2)Eclipse下载绿色版,无需安装,解压即可使用

(3)Nutch1.2下载解压,后面创建工程的时候会用到,注意解压后不能放到eclipse的workspace目录下

(4)ant和Javacc只需配置好环境变量Patch即可

(5)Luke只要下载完后双击jar文件即可运行

(6)Cygwin安装相对复杂一点,具体步骤如下:

官网http://www.cygwin.com/下载setup.exe并安装

些处的包选择默认安装即可,不要选全部安装

最后配置环境变量Path(否则eclipse中运行nutch工程会出错)

三、Nutch1.2导入Eclipse中

1. 新建工程

(1)新建工程,在Location处选择解压的nutch-1.2目录

(2)在Source选项下,添加输出目录tmp_build,主要是防止原有目录下的nutch被覆写

(3)切换到Libraries选项下,Add Class Folder,选择conf

(4)切换到Order and Export选项下,选中conf,然后Top到顶端,主要是为了后面配置起来更方便点

(5)切换回Libraries选项下,选Add External Jars,添加lib目录下所有的jar文件

(6) 添加完点Finish会弹出如下窗口,这主要是我们改了输出目录为tmp_build,点NO

2. 修改代码

(1)conf/nutch-site.xml

(2)conf/nutch-default.xml

(3)conf/crawl-urlfilter.txt

(4)在项目根目录下新建weburls.txt文件,输入如下内容

(5)设置参数:Run as->Run Configuration

主类:

运行参数:

(6)运行,完成后在根目录下自动创建crawl目录

四、中文分词

1. 准备

将IKAnalyzer3.2.8.jar文件拷入nutch/lib目录下,并在eclipse的nutch项目中添加这个jar包。

2. 修改代码

(1)NutchAnalysis.jj

在nutch/src/java/org/apache/nutch/analysis目录

在该文件里找到 | <SIGRAM: <CJK> >,这代表按字划分,修改为 | <SIGRAM: (<CJK>)+ >

将NutchAnalysis.jj文件拷到其他目录下,如nutch/src/java/org/apache/nutch/clustering目录

用javacc工具编译NutchAnalysis.jj的源代码,将生成的所有java源代码(7个文件)全部覆盖到原 src/java/org/apache/nutch/analysis包下.

javacc的使用方法:cmd进入到NutchAnalysis.jj所在目录

输入命令:

javacc NutchAnalysis.jj

就会生成7个文件了。

(2)NutchAnalysis.java

在nutch/src/java/org/apache/nutch/analysis目录

在两个位置加入ParseException异常捕捉命令,否则ant时会提示出错。下面的代码已经添加

public static Query parseQuery(String queryString, Configuration conf) throws IOException,ParseException{
    return parseQuery(queryString, null, conf);
  }

public static Query parseQuery(String queryString, Analyzer analyzer, Configuration conf)
    throws IOException,ParseException {
    NutchAnalysis parser = new NutchAnalysis(
          queryString, (analyzer != null) ? analyzer : new NutchDocumentAnalyzer(conf));
    parser.queryString = queryString;
    parser.queryFilters = new QueryFilters(conf);
    return parser.parse(conf);
  }

(3)Query.java

修改完上面代码后你会发现org.apache.nutch.searcher包中的Query.java报错。

解决方法是找到报错的地方用try{}catch(){}语句抓住异常,不要抛出,否则接下来还要改很多文件。

public static Query parse(String queryString, String queryLang, Configuration conf)
  throws IOException {
	  Query query = null;
	  try
	  {
		  try 
		  {
			query = NutchAnalysis.parseQuery(queryString, AnalyzerFactory.get(conf).get(queryLang), conf);
		  } 
		  catch (ParseException e) 
		  {
			// TODO Auto-generated catch block
			e.printStackTrace();
		  }
	  }
	  catch(IOException e)
	  {
		  e.printStackTrace();
	  }
    return fixup(query, conf);
  }

(4)NutchDocumentAnalyzer.java

<1> 引入IKAnalyzer包

import org.wltea.analyzer.lucene.IKAnalyzer;

<2> 修改public TokenStream tokenStream(String fieldName, Reader reader) {函数为:

public TokenStream tokenStream(String fieldName, Reader reader) {
   /* Analyzer analyzer;
    if ("anchor".equals(fieldName))
      analyzer = ANCHOR_ANALYZER;
    else
      analyzer = CONTENT_ANALYZER;
    return analyzer.tokenStream(fieldName, reader);
    */
    Analyzer analyzer = new org.wltea.analyzer.lucene.IKAnalyzer();
    return analyzer.tokenStream(fieldName, reader);
  }

(5)nutch/build.xml

<1> 在<target name="war" depends="jar,compile,generate-docs"></target>的<lib></lib>之间<include name="log4j-*.jar"/> 下(约200行),加入下面的命令使得编译war

文件的时候加入je-analysis的jar文件,注意IKAnalyzer3.2.8.jar的版本号

<include name="IKAnalyzer3.2.8.jar"/>

<2>修改<target name="job" depends="compile">,改为<target name="job" depends="compile,war">这样编译后能自动在bulid文件夹下生成nutch-1.2.job,nutch-1.2.war,nutch-1.2.jar文件了。(注:不这样也可以,最后直接ant war, ant jar 就能生成nutch-1.2.war,nutch-1.2.jar)

(6)ant

cmd进入命令行,切换到nutch所在目录,执行ant命令,就会开始ant工作(相当于重新编译一下)。完成后会在nutch目录下生成build目录

(7)文件替换

<1> 将build/nutch-1.2.job替换nutch目录下文件

<2> 将build/nutch-1.2.jar替换nutch目录下文件

<3> 将build/nutch-1.2.war替换nutch目录下文件,这步不需要的

注:如果ant后没有在build目录下生成nutch-1.2.jar和nutch-1.2.war文件,则命令行执行命令 ant jar 和 ant war生成这两个文件

(8)重新爬行

重新运行eclipse,生成crawl目录。

五、Luke查看分词结果

(1)File->Open Lucene index,选择上面生成的crawl目录下的index目录

 

(2)未分词前

(3)分词后

六、Nutch部署到Tomcat中

(1)将新生成的nutch-1.2.war拷贝到Tomcat 7.0/webapps目录下,启动Tomcat服务后(运行bin目录下的startup.bat文件,每次运行之后关闭用shutdown.bat),会自动在该目录下生成一个nutch-1.2文件夹。

(2)将新生成的nutch-1.2.jar文件和分词包(IKAnalyzer3.2.8.jar)拷贝到tomcat的WEB-INF/lib下面

(3)在tomcat/webapps/nutch-1.2/WEB-INF/classes/nutch-site.xml 文件中如下配置,F:\Graduate\nutch\nutch-1.2\crawl为搜索结果目录

<configuration>
 <property>  
    <name>searcher.dir</name>  
    <value>F:\Graduate\nutch\nutch-1.2\crawl</value>  
</property>  
</configuration>

(4)如果出现乱码,则将tomcat安装目录下conf/server.xml定位到connector并修改一下:

<Connector prot="8080" protocol="HTTP/1.1"

         connectionTimeout="20000"

         redirectPort="8443"

         URIEncoding="UTF-8"

         useBodyEncodingForURI="true" />

(5)http://localhost:8080/nutch 搜索测试 

(6)分词后出现的问题

在重新部署后,你在搜索时会发现有时会出先空白页,有的句子、词输入进去无法查询。

针对与这个情况,查看tomcat log发现如下提示:

org.apache.catalina.core.StandardWrapperValve invoke

严重: Servlet.service() for servlet jsp threw exception

java.lang.StringIndexOutOfBoundsException: String index out of range: -3

解决方法:

在tomcat中部署的nutch目录下进入WEB-INF\classes

找到nutch-site.xml  在这里添加如下代码即可。

<property>       <name>plugin.includes</name>       <value>protocol-http|urlfilter-regex|parse-(text|html|js)|analysis-(zh)|index-basic|query-(basic|site|url)|summary-lucene|scoring-opic|urlnormalizer-(pass|regex|basic)</value>   </property> 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值