Nutch 的数据包括两种类型:
注:如果发现有解释不清的地方,请参考这里,不过说实话,Nutch的文档远远不够完善,还存在很多语焉不详的地方。 字串3
创建相关的目录并创建一个空的 web 数据库: 字串5
[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]#
字串8
接下来需要用“注射器(injector)”把网址"注入"到数据库中。Nutch 的文档中是从 DMOZ 获取一个 URL 集合,然后取一个子集进行处理。不过该文档实在是太大了。这里用了 http://rdf.dmoz.org/rdf/ 目录下的 content.example.txt 文件做测试。
字串5
[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]#字串8
还好,40 个 URL 而已。不算太多。
从数据库中创建 fetchlist :
字串7
[root@fc3 nutch]# bin/nutch generate db segments字串7
segments 目录的基本信息: 字串4
[root@fc3 nutch]# tree segments
segments
`-- 20050104135736
`-- fetchlist
|-- data
`-- index
2 directories, 2 files
[root@fc3 nutch]#
字串1
接下来需要把 segments 目录“20050104135736”保存到一个环境变量中,供以后使用。 字串5
[root@fc3 nutch]# s1=`ls -d segments/2* | tail -1` 字串8
运行 fetcher,获取这些 URL 信息: 字串8
[root@fc3 nutch]# bin/nutch fetch $s1字串5
之后需要更新数据库,把获取到的页面信息存入数据库中:
[root@fc3 nutch]# bin/nutch updatedb db $s1
字串5
进行链接分析(analyze: adjust database link-analysis scoring),深度这里设定为3 ,来决定下次 fetch 操作的优先权:
字串7
[root@fc3 nutch]# bin/nutch analyze db 3 字串5
创建新的 segment ,选择分值排在前 10 的URL(一个很小的子集)来进行第二次获取: 字串2
[root@fc3 nutch]# bin/nutch generate db segments -topN 10 字串4
把新的 segments 名字存到 $s2 变量中。 字串6
[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]#
字串8
然后依样画葫芦,进行第二次获取,更新,以及分析: 字串9
[root@fc3 nutch]# bin/nutch fetch $s2 ...... [root@fc3 nutch]# bin/nutch updatedb db $s2 ...... [root@fc3 nutch]# bin/nutch analyze db 3 ...... 字串7
如法炮制,再来第三次:
字串1
[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 ......字串5
[root@fc3 nutch]# bin/nutch index $s1 ...... [root@fc3 nutch]# bin/nutch index $s2 ...... [root@fc3 nutch]# bin/nutch index $s3 ...... 字串5
去除重复页面:
[root@fc3 nutch]# bin/nutch dedup segments dedup.tmp字串1
[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字串3
注意:webapp 必须要在相对路径 ./segments 找到具体数据。否则在搜索的时候会报告如下异常信息:
字串1
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) 字串9
搜索测试: 字串1
Nutch 的机器人还不如其他商业搜索引擎的那样灵活(需要“喂"给它URL)。但是比较适合一些特定应用。比如 Grassland 这样的小型特性目的的搜索引擎,可以用 Nutch + Lucene 来比较完美的实现。单独做一个收集 URL (RSS ?)信息的工具,然后 Nutch 进行处理,Lucene 来实现更为完善的全文搜索功能。希望能看到越来越多的实际项目应用到 Nutch 。
参考信息 字串6
很多朋友都遇到 Nutch 0.6 输入中文会出现乱码的问题。这个问题其实和 Nutch 关系不大,主要原因是使用 Tomcat 5.0 的问题。解决办法是修改 Tomcat 的server.xml 文件的connnector:
<Connector port="8080"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true"
URIEncoding="UTF-8" useBodyEncodingForURI="true" /> 字串3
黑色部分是需要添加的.之后乱码问题就解决了. 字串1

| 最新评论: |