利用Nutch实现分类搜索(一)(加入index plugin)

来源:互联网 发布:js中字符串的长度函数 编辑:程序博客网 时间:2024/05/16 07:22
 Simsun">大家在用Google的时候会发现可以按分类来搜索,例如可以搜新闻、博客和购物等等,本系列文章将通过在Nutch中加入插件的方式来实现此功能。本系列文章假设读者对Nutch有一定的了解,能成功编译和简单配置Nutch,并用Nutch提供的Crawl来抓取网页。
本文将讲述如何在Nutch系统中加入我们的index-type plugin。
在利用luke查看抓去的数据时,可以发现默认有十几个fileds,例如title、url和content等等,我们要加入一个type field用来表示网站类型。
在src/plugin目录下创建index-type目录(可以参考index-basic的目录结构),加入如下三个java文件。需要注意的是包的名称要和建立的文件目录结构一致。
TypeNameFactory实现了IndexingFilter接口,Extention Manager将会从此作为入口。
expand sourceview plain

 TypeNameFactory根据参数indexer.type.includes的值,得到type的种类,而后根据种类读取相应的规则文件,并放入HashMap中。
Consolas">+ expand sourceview plain
 TypeNameSelector对应于一个规则文件,提供filter接口以筛选网址。
Consolas">+ expand sourceview plain
 在lib-regex-filter中加入org.apache.nutch.urlfilter.api.Rule。
Consolas">+ expand sourceview plain
 加入build.xml,用到了lib-regex-filter库,所以要加入引用。
Consolas">+ expand sourceview plain
 加入plugin.xml,注意extention point是"org.apache.nutch.indexer.IndexingFilter",是indexing的公共的接口。
Consolas">+ expand sourceview plain
 还有一件重要的事情,把这个index-type加入编译系统,修改src/plugin/build.xml,添加如下编译入口:
Consolas">view plain
  1. <targetname="deploy">  
  2.    <ant dir="index-type" target="deploy"/>  
  3. </target>  
  4. <target name="clean">  
  5.    <ant dir="index-type" target="clean"/>  
  6. </target>  
 至此,在ant package的时候会把我们的index-type编译进去了,查看编译结果能否正确产生index-type.jar。
在成功编译完成后,我们来尝试一下抓取网页,之前需要对conf/nutch-site.xml做修改:
加入indexer.type.includes参数,值为各种网页类型,用“|”分隔多个类型,在plugin.includes参数的值中加入index-type,这样在系统启动时会自动加载index-type plugin。
Consolas">+ expand sourceview plain
 对每一种网页类型,提供一个对应规则文件,下面crawl-urltype-news.txt是针对news设计的规则。
Consolas">view plain
  1. accept hosts in   
  2. +^http://news.sina.com.cn/  
  3. +^http://news.baidu.com/  
  4. +^http://news.163.com/  
  5. skip everything else  
  6. -.  
 另外4中type类似,在此不一一贴出,需要注意的是文件命名规则为crawl-urltype-(YOURWEBTYPE).txt,YOURWEBTYPE和indexer.type.includes参数中的值一一对应,文件放置于conf目录下。
而后设置crawl的起始urls,运行nutch crawl就可以在网络上抓取数据了,利用luke查看最终结果,可以发现多了一个type field,如果抓取的网页足够多的话,可以看到有5个值,分别都定义于indexer.type.includes中。
至此index能够成功根据不同的网页类型将其type field加入结构的索引中了。