论坛首页 Java企业应用论坛

今天来用一个例子来详细讲解下nutch当中到底是如何自定义插件的

浏览 3156 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-12-17  

接上面一篇,今天来用一个例子来详细讲解下nutch当中到底是如何自定义插件的。


1.首先在src/plugin/,新建一个文件夹,这个文件夹我们姑且就叫(urlfilter-urllength ),从名字就可以看出我们这个自定义的插件的作用是什么了。
   1.我们这个类实现了URLFilter.当然要实现其没有实现的方法了。public class UrlLengthFilter implements URLFilter。
   2.下面贴出详细的源码看下:
   public class UrlLengthFilter implements URLFilter {
    private static final Log LOG = LogFactory.getLog(UrlLengthFilter.class);
    private Configuration conf;
    @Override
    public String filter(String inUrl) {
        LOG.info("begin UrlLengthFilter is .....");
        String urlFilter = "";
        if (inUrl == null || inUrl == "") return urlFilter;
        String url = inUrl.toLowerCase();
        // from first character after 'http://' or first character
        int start = url.indexOf("http://");
        start = start < 0 ? (url.indexOf("https://") == 0 ? 8 : 0) : 7;
        url = url.substring(start);
        int end = url.indexOf("/");
        end = end < 0 ? url.length() : end;
        // return the first character to the first or end
        urlFilter = url.substring(0, end);
        LOG.info("urlFilter is " + urlFilter);
        return urlFilter;
    }

    @Override
    public Configuration getConf() {
        return conf;
    }

    @Override
    public void setConf(Configuration conf) {
        this.conf = conf;
    }
   }   

2.当然要有plugin.xml这个.xml的作用就不用说了不吧!很明显就是加载我们所写的类(实现某一个功能)。代码还是贴出来分析下:
<?xml version="1.0" encoding="UTF-8"?>
<plugin
   id="urlfilter-urllength"
   name="Suffix URL Filter"
   version="1.0.0"
   provider-name="xp.com">
   <requires>
      <import plugin="nutch-extensionpoints"/>
   </requires>
   <extension id="com.xp.se.test.urllength"
              name="Nutch URL Length Filter"
              point="org.apache.nutch.net.URLFilter ">
      <implementation id="UrlLengthFilter" class="com.xp.se.urllength.UrlLengthFilter"/>
   </extension>
</plugin>

分析:
    a、第一句就知道吧,xml声明的编码格式和所使用的版本。
    b、id : 这个插件的id。
       name : 插件的的作用是什么。
      version : 插件的版本。
      provider-name : 是谁提供的(源)。
    c、nutch-extensionpoints : 这里面是ntuch自带的几个插件。我们在这里是把它现引进来。
    d、extension : 扩展,顾名思义就是说:把我们自己写好的插件交给nutch来用。相信读过nutch源码的都很清楚还有一个extension-point.它们之间有什么关系。不过不知道也没关系,跟着来做就行了。回头从网上google下就可以明白的。
    e、id : 是所定义一个名称
      name: 这个扩展的作用是什么。功能是什么。看了这个后可以一目了然啊。
      point : 是从nutch那个扩展点集成的。这个point是要和nutch-extensionpoints/plugin.xml中的某个id相一致 的。
      implementation : 我们自己写的类。
3.通常还有一个build.xml.这个是用来编译的。
4.在nutch-site中加上我们写的这个插件吧,跑下试试。
<property>
  <name>plugin.includes</name>
  <value>protocol-http|urlfilter-(regex|urllength )|parse-(text|html|js)|index-(basic|anchor)|query-(basic|site|url)|response-(json|xml)|summary-basic|scoring-opic|urlnormalizer-(pass|regex|basic)</value>
  <description>Regular expression naming plugin directory names to
  include.  Any plugin not matching this expression is excluded.
  In any case you need at least include the nutch-extensionpoints plugin. By
  default Nutch includes crawling just HTML and plain text via HTTP,
  and basic indexing and search plugins. In order to use HTTPS please enable
  protocol-httpclient, but be aware of possible intermittent problems with the
  underlying commons-httpclient library.
  </description>
</property>
细心的朋友已经发现我们在上面已经加上了。没有发现的话,再细致看下....
总结 :
自己可以跟踪下。肯定进来。比如我们在url中写一个url : http://www.163.com/ 通过我们写的这个会变成 : www.163.com 。程序就会终止了。写这个目的是现理清这个nutch的插件的加载流程和学习如何
自定义一个自己的插件。我们可以写很多的plugin,都可以通过上面所讲的这种方法来实现。

论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics