研究Nutch开源搜索引擎心得记录

---------------20080828------------
下载源码,初步研究
--------------20080829-------------
http://blog.csdn.net/lianqiang198505/archive/2007/04/18/1569680.aspx
前两天试用了nutch目前的最新版本。这个版本是完全建立在hadoop基础上的,也就是一个分布式的系统。

去网上搜索了一下,发现了一篇很好的知道文档,这个给出链接地址

http://wiki.apache.org/nutch/NutchHadoopTutorial

按照这个上面的做,如果你运不差的话应该可以让nutch自己跑起来,而且后面的分布式检索也可以尝试一下,这里把我整个过程出现的问题分享如下:

1. 0.9版本需要一个叫masters的文件,这个文件的内容存放备用的名字节点,没有也不影响你正常的使用;
2. 可以把mapred.map.tasks、mapred.reduce.tasks按节点的倍数调大,这样运行速度会更快;
3. 如果发现节点找不到,这个时候有可能是机器的主机名不对,修改一下就可以了;
4. hadoop运行的时候需要占用一些端口,如果你不能弄清需要那些端口,就把防火墙打开,在局域网内安全问题不大;
5. 抓取的时候一定要设置一下nutch-default.xml中的agent,不然它为空的话你将什么都抓取不到;
6. 在分布式检索的时候,为了防止名字节点既做slave,又做search server,使得search server去分布式文件系统中找index,这个时候按照上面的指导我们在nutch目录下可以再建立一个文件夹,然后在里面也安装一个nutch- 0.9,注意这个配置都采用默认的就可以,然后不要调用它的start-all.sh,因为这样会有冲突,你只需要运行bin/nutch server命令就可以了,这样它就可以提供检索服务了;
7. 那个指示所有search server服务节点的文件一定要叫search-servers.txt,不然nutch找不到其他的。


注意:运行nutch之前,需要先启动hadoop,会在/tmp目录下面产生临时PID文件,需要将/tmp改成777权限,你使用的当前用户需要有/tmp的写权限,否则运行不起来。报些看不懂的错误。我在这个地方郁闷了好几个小时,呵呵。

------------------------------20080901---------------------------
尝试crawl页面,当urls/nutch.txt只有一行,nutch-0.90有BUG,具体的链接如下,需要对源码进行修改,这个BUG在最新的版本中已经修改了。
http://hi.baidu.com/phpasp/blog/item/f3b96209f5948bcb3ac76351.html

//BUG FIX NUTCH-503
找到下面这个类删除几行,加上几行,重新编译就可以用了
Index: src/java/org/apache/nutch/crawl/Generator.java
===================================================================
--- src/java/org/apache/nutch/crawl/Generator.java (revision 549414)
+++ src/java/org/apache/nutch/crawl/Generator.java (working copy)
@@ -422,7 +422,16 @@

// check that we selected at least some entries ...
SequenceFile.Reader[] readers = SequenceFileOutputFormat.getReaders(job, tempDir);
- if (readers == null || readers.length == 0 || !readers[0].next(new FloatWritable())) {
+ boolean empty = true;
+ if (readers != null && readers.length > 0) {
+ for (int num=0; num<readers.length; num++) {
+ if (readers[num].next(new FloatWritable())) {
+ empty = false;
+ break;
+ }
+ }
+ }
+ if (empty) {
LOG.warn("Generator: 0 records selected for fetching, exiting ...");
LockUtil.removeLockFile(fs, lock);
fs.delete(tempDir);

修改完后,重新编译


抓取命令
bin/nutch crawl urls -dir crawl -depth 3 -topN 50

Once the index has been created on the DFS you can use the hadoop copyToLocal command to move it to the local file system as such.

nutch可以直接利用分布式进行查询,也可以将文件copy到本地,下面就是copy的命令
bin/hadoop dfs -copyToLocal crawl /nutch/local

配置tomcat

搞定了。


深入了解nutch,学习资料
http://www.gispark.com/html/spatial/2006/1008/294.html


-------------------20080902-03---------------
研究中文分词集成,配置paoding分词插件
1)在src/plugin下面加入,analysis-zh和lib-paoding-analyzers目录。具体参见
E:\workspace\searchengine\nutch-0.9\src\plugin\analysis-zh
E:\workspace\searchengine\nutch-0.9\src\plugin\lib-paoding-analyzers

下面是analysis-zh中的源码,是对paoding的封装,代码超级easy,主要是把配置文件和ant脚本调对就可以了
/**
* Paoding chinese analyzer
*/

package org.apache.nutch.analysis.zh;

// JDK imports
import java.io.Reader;

// Lucene imports
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;

// Nutch imports
import org.apache.nutch.analysis.NutchAnalyzer;


/**
* A simple Chinese Analyzer that wraps the Lucene one.
* @author kevin tu
*/
public class ChineseAnalyzer extends NutchAnalyzer {

private final static Analyzer ANALYZER =
new net.paoding.analysis.analyzer.PaodingAnalyzer();


/** Creates a new instance of ChineseAnalyzer */
public ChineseAnalyzer() { }


public TokenStream tokenStream(String fieldName, Reader reader) {
return ANALYZER.tokenStream(fieldName, reader);
}

}


2)修改src\plugin的build.xml
<target name="deploy">
<ant dir="analysis-zh" target="deploy"/><!--kevin 20080903 add-->
<ant dir="lib-paoding-analyzers" target="deploy"/><!--kevin 20080903 add-->
...
</target>

<target name="clean">
<ant dir="analysis-zh" target="clean"/><!--kevin 20080903 add-->
<ant dir="lib-paoding-analyzers" target="clean"/><!--kevin 20080903 add-->
...
</target>

3)修改nutch-site.xml,加入|analysis-(zh)| ,这个很重重要,否则nutch只会加载默认插件,不会加载paoding的jar包,和自己写的analysis-(zh) jar包
<property>
<name>plugin.includes</name>
<value>protocol-http|urlfilter-regex|parse-(text|html|js)|analysis-(zh)|index-basic|query-(basic|site|url)|summary-basic|scoring-opic|urlnormalizer-(pass|regex|basic)</value>
<description>
</description>
</property>

4)重新打包 ant package

5)配置tomcat,修改webapps/cse/WEB-INF/classes/nutch-site.xml
<configuration>
<property>
<name>fs.default.name</name>
<value>local</value>
</property>

<property><!--指定本地的index目录-->
<name>searcher.dir</name>
<value>/nutch/local/crawled</value>
</property>
<property>
<name>plugin.includes</name>
<value>protocol-http|urlfilter-regex|parse-(text|html|js)|analysis-(zh)|index-basic|query-(basic|site|url)|summary-basic|scoring-opic|urlnormalizer-(pass|regex|basic)</value>
<description>
</description>
</property>
</configuration>

6)配置paoding运行参数,加入paoding-analysis.properties
paoding.imports=\
ifexists:classpath:paoding-analysis-default.properties;\
ifexists:classpath:paoding-analysis-user.properties;\
ifexists:classpath:paoding-knives-user.properties

配置export PAODING_DIC_HOME=/nutch/dic

6)启动tomcat,查看http://linux1:8080/cse

--------------------------20080904---------------------

模仿神功,修改nutch的web页面

其中about.html,search.html,help.html是用xslt来生成的,需要修改src/web/pages/zh下面的about.xml,search.xml,help.xml,然后用ant generate-docs来进行编译,生成最新的html文件

将现有的zh下面的properties从ascii转码到中文,用以下的命令
native2ascii -reverse -encoding GBK search_zh.properties >original\search_zh.properties
增加ant 的target
<!-- ====================================================== -->
<!-- native to ascii -->
<!-- ====================================================== -->
<target name="native2ascii" description="native to ascii *.js or *.property file">
<native2ascii encoding="GBK" src="src/web/locale/org/nutch/jsp/original" dest="src/web/locale/org/nutch/jsp" ext=".properties" includes="*.properties"/>
</target>

<!-- ====================================================== -->
<!-- Compile the Java files -->
<!-- ====================================================== -->
<target name="compile" depends="native2ascii,compile-core, compile-plugins"/>


解决了分页问题,修改了文字,分页逻辑按照baidu的分页来做,当用户点击1~9页时只显示1~10,当选中10以上的页面时,显示 (n-10)~(n+10),这一块用一个JSP函数来实现


编译nutch0.9,有两个plugin编译不能通过,mp3,rtf插件编译,找不到jar,暂时可以不用

--------------------------20080905---------------------
编译nutch-svn项目,进一步优化页面

Nutch距离一个商业应用的搜索引擎还有多远
http://www.cnblogs.com/liushouzhao/archive/2008/01/02/1023219.html

nutch的cache策略及cache策略研究
http://blog.csdn.net/kauu/archive/2007/11/02/1863217.aspx

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值