4) 执行抓取,获取网页信息---fetch
5) 更新,把获取到的页面信息存入中---updatedb
6) 重复进行 3~5的步骤,直到预先设定的抓取深度。---这个循环过程被称为“产生/抓取/更新”循环
7) 根据sengments 的内容更新 linkdb---invertlinks
8) 建立索引---index
9) 在索引中丢弃有重复内容的网页和重复的URLs (dedup).
10) 将segments中的索引进行合并生成用于检索的最终index(merge).
11) 用户通过用户接口进行查询操作
12) 将用户查询转化为lucene 查询
13) 返回结果
其中,1~6属于爬虫部分;7~10 属于索引部分;11~13属于查询部分。
在创建一个WebDB之后, “产生/抓取/更新”循环(步骤3-6)根据一些URLs开始启动。当这个循环彻底结束,Crawler根据抓取中生成的segments创建索引(步骤7-10)。在进行重复URLs清除(步骤9)之前,每个segment的索引都是独立的(步骤8)。最终,各个独立的segment索引被合并为一个最终的索引index(步骤10)。
其中有一个细节问题,Dedup操作主要用于清除segment索引中的重复URLs,但是我们知道,在WebDB中是不允许重复的URL存在的,那么为什么这里还要进行清除呢?原因在于抓取的更新。比方说一个月之前你抓取过这些网页,一个月后为了更新进行了重新抓取,那么旧的segment在没有删除之前仍然起作用,这个时候就需要在新旧segment之间进行除重。
Nutch本身的搜索测试:
在 cygwin 中输入 ”bin/nutch org.apache.nutch.searcher.NutchBean csdn” ,即调用 NutchBean 的 main 方法搜索关键字 ”csdn” ,在 cygwin 可以看到搜索出: Total hits: 29 ( hits 相当于 JDBC 的 results )
注意: 如果发现搜索结果始终为 0 ,则需要配置一下 nutch-1.2/conf 的 nutch-site.xml 试试添加下面这段:(注意之前的http.agent.name必须有,如果没有这个property,则搜索结果一直为0)
<!--fileproperties-->
<property>
<name>searcher.dir</name>
<value>E:/nutch/csdn</value>
<description></description>
</property>
使用Tomcat进行搜索测试
(1)将nutch目录的nutch-1.0.war复制到tomcat/webapps下,可以改名为nutch以简化目录名,不改也可以
(2)启动tomcat,然后就在webapps下面自动生成了一个nutch的文件夹,
(3)打开 nutch/WEB-INF/classes下的nutch-site.xml文件,改为以下内容
<?xmlversion="1.0"?>
<?xml-stylesheettype="text/xsl"href="configuration.xsl"?>
<configuration>
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-49657-4.html
又在这里自娱自乐