本站首页    管理页面    写新日志    退出


«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31


公告
 本博客在此声明所有文章均为转摘,只做资料收集使用。

我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:
日志总数:1304
评论数量:2242
留言数量:5
访问次数:7591325
建立时间:2006年5月29日




[Apache(jakarta)]Nutch 初体验之二(转)
软件技术

lhwork 发表于 2006/12/13 15:57:27

Nutch 初体验之二----转自DBA notes    地址:http://rayspace.bokee.com/5425910.html 前几天介绍了 Nutch 的基本信息 以及 如何使用 Nutch 进行 Intranet crawling。下面进行一下全网的爬行(Whole-web Crawling) 的操作测试。 Nutch 的数据包括两种类型:     * Web 数据库。包含所有Nutch可以辨别的页面,以及这些页面间的链接信息。     * 段(segment)集合. 每个 segment 是作为一个单元(unit)被获取并索引的页面集合。Segment 数据包括如下类型:           o fetchlist:指定待获取的一个页面集合的文件           o fetcher output:包含获取到的页面的文件集合           o index:fetcher 输出的 Lucene 格式的索引 注:如果发现有解释不清的地方,请参考这里,不过说实话,Nutch的文档远远不够完善,还存在很多语焉不详的地方。 创建相关的目录并创建一个空的 web 数据库:     [root@fc3 nutch]# mkdir db     [root@fc3 nutch]# mkdir segments     [root@fc3 nutch]# bin/nutch admin db -create     run java in /u01/app/oracle/product/10.1.0/db_1/jdk/jre     050104 122933 loading file:/u01/nutch/conf/nutch-default.xml     050104 122934 loading file:/u01/nutch/conf/nutch-site.xml     050104 122934 Created webdb at db     [root@fc3 nutch]# tree db     db     |-- dbreadlock     |-- dbwritelock     `-- webdb         |-- linksByMD5         |   |-- data         |   `-- index         |-- linksByURL         |   |-- data         |   `-- index         |-- pagesByMD5         |   |-- data         |   `-- index         `-- pagesByURL             |-- data             `-- index     5 directories, 10 files     [root@fc3 nutch]# 接下来需要用“注射器(injector)”把网址"注入"到数据库中。Nutch 的文档中是从 DMOZ 获取一个 URL 集合,然后取一个子集进行处理。不过该文档实在是太大了。这里用了 http://rdf.dmoz.org/rdf/ 目录下的 content.example.txt 文件做测试。 [root@fc3 nutch]# bin/nutch inject db -dmozfile content.example.txt run java in /u01/app/oracle/product/10.1.0/db_1/jdk/jre 050104 123105 loading file:/u01/nutch/conf/nutch-default.xml 050104 123106 loading file:/u01/nutch/conf/nutch-site.xml 050104 123106 skew = 1251308788 050104 123106 Begin parse 050104 123106 Using URL filter: net.nutch.net.RegexURLFilter 050104 123106 found resource regex-urlfilter.txt at file:/u01/nutch/conf/regex-urlfilter.txt .050104 123106 Completed parse.  Added 40 pages. ...... [root@fc3 nutch]# 还好,40 个 URL 而已。不算太多。 获取 URL 从数据库中创建 fetchlist :     [root@fc3 nutch]# bin/nutch generate db segments segments 目录的基本信息:     [root@fc3 nutch]# tree segments     segments     `-- 20050104135736         `-- fetchlist             |-- data             `-- index     2 directories, 2 files     [root@fc3 nutch]# 接下来需要把 segments 目录“20050104135736”保存到一个环境变量中,供以后使用。     [root@fc3 nutch]# s1=`ls -d segments/2* | tail -1` 运行 fetcher,获取这些 URL 信息:           [root@fc3 nutch]# bin/nutch fetch $s1 之后需要更新数据库,把获取到的页面信息存入数据库中:     [root@fc3 nutch]# bin/nutch updatedb db $s1 进行链接分析(analyze: adjust database link-analysis scoring),深度这里设定为3 ,来决定下次 fetch 操作的优先权:     [root@fc3 nutch]# bin/nutch analyze db 3 创建新的 segment ,选择分值排在前 10 的URL(一个很小的子集)来进行第二次获取:     [root@fc3 nutch]# bin/nutch generate db segments -topN 10 把新的 segments 名字存到 $s2 变量中。     [root@fc3 nutch]# s2=`ls -d segments/2* | tail -1`     [root@fc3 nutch]# echo $s2     segments/20050104140654     [root@fc3 nutch]# echo $s1     segments/20050104135736     [root@fc3 nutch]# tree segments     segments     |-- 20050104135736     |   |-- content     |   |   |-- data     |   |   `-- index     |   |-- fetcher     |   |   |-- data     |   |   `-- index     |   |-- fetchlist     |   |   |-- data     |   |   `-- index     |   |-- parse_data     |   |   |-- data     |   |   `-- index     |   `-- parse_text     |       |-- data     |       `-- index     `-- 20050104140654         `-- fetchlist             |-- data             `-- index     8 directories, 12 files     [root@fc3 nutch]# 然后依样画葫芦,进行第二次获取,更新,以及分析:     [root@fc3 nutch]# bin/nutch fetch $s2     ......     [root@fc3 nutch]# bin/nutch updatedb db $s2     ......     [root@fc3 nutch]# bin/nutch analyze db 3     ...... 如法炮制,再来第三次:     [root@fc3 nutch]# bin/nutch generate db segments -topN 5     ......     [root@fc3 nutch]# s3=`ls -d segments/2* | tail -1`     ......     [root@fc3 nutch]# bin/nutch fetch $s3     ......     [root@fc3 nutch]# bin/nutch updatedb db $s3     ......     [root@fc3 nutch]# bin/nutch analyze db 3     ...... 创建索引并去掉重复的 URL     [root@fc3 nutch]# bin/nutch index $s1     ......     [root@fc3 nutch]# bin/nutch index $s2     ......     [root@fc3 nutch]# bin/nutch index $s3     ...... 去除重复页面:     [root@fc3 nutch]# bin/nutch dedup segments dedup.tmp 配置 Tomcat [root@fc3 nutch]# rm -rf /opt/Tomcat/webapps/ROOT* [root@fc3 nutch]# cp nutch*.war /opt/Tomcat/webapps/ROOT.war [root@fc3 nutch]# cd /opt/Tomcat/webapps/ [root@fc3 webapps]# jar xvf ROOT.war ...... [root@fc3 nutch]# ../../opt/Tomcat/bin/catalina.sh start 注意:webapp 必须要在相对路径 ./segments 找到具体数据。否则在搜索的时候会报告如下异常信息: java.lang.NullPointerException    at net.nutch.searcher.NutchBean.init(NutchBean.java:82)    at net.nutch.searcher.NutchBean.>init<(NutchBean.java:68)    at net.nutch.searcher.NutchBean.>init<(NutchBean.java:58)    at net.nutch.searcher.NutchBean.get(NutchBean.java:50)    at org.apache.jsp.search_jsp._jspService(search_jsp.java:66)    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:137) 搜索测试: Nutch Whole Web Search Test 其他想法 Nutch 的机器人还不如其他商业搜索引擎的那样灵活(需要“喂"给它URL)。但是比较适合一些特定应用。比如 Grassland 这样的小型特性目的的搜索引擎,可以用 Nutch + Lucene 来比较完美的实现。单独做一个收集 URL (RSS ?)信息的工具,然后 Nutch 进行处理,Lucene 来实现更为完善的全文搜索功能。希望能看到越来越多的实际项目应用到 Nutch 。


阅读全文(1513) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.355 second(s), page refreshed 144770246 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号