`

nutch插件编写

阅读更多
说说NUTCH插件


AntluceneXMLApacheSpring

每一个基本的非范围搜索都可以由NUTCH来实现,但当我们希望它可以实现范围搜索的时候,我们就需要自己实现插件来完成这个功能。
1)我们查看插件的组织目录,发现NUTCH把很多功能都作为插件来进行插入:

2)我们可以看到conf文件夹内的nutch-default.xml文件,打开它,我们可以看到如下代码:
Xml代码 
<property> 
  <name>plugin.includes</name> 
  <value>protocol-http|urlfilter-regex|parse-(text|html|js|tika)|index-(basic|anchor|more)|query-(basic|site|url|lastModified)|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. Nutch now also includes integration with Tika 
  to leverage Tika's parsing capabilities for multiple content types. The existing Nutch 
  parser implementations will likely be phased out in the next release or so, as such, it is 
  a good idea to begin migrating away from anything not provided by parse-tika. 
  </description> 
</property> 
   如果我们需要添加什么插件,只需要在此处进行添加即可。
3)下面我们进行正题,如何开发NUTCH插件:
就以我开发queryLastModified这个插件来说:
新建一个类,名字随便啦,我这时就命名为LastModifiedQueryFilter,代码如下:
Java代码 
private Configuration conf; 
 
    public LastModifiedQueryFilter() { 
        super("lastmodified"); 
    } 
 
    public Configuration getConf() { 
        return this.conf; 
    } 
 
    private static final String FIELD_NAME = "lastmodified"; 
 
    // query syntax is defined as date:yyyymmdd-yyyymmdd 
    private static final Pattern pattern = Pattern 
            .compile("(\\d{8})\\s(\\d{8})$"); 
 
    public BooleanQuery filter(Query input, BooleanQuery output) 
            throws QueryException { 
        // examine each clause in the Nutch query 
        Clause[] clauses = input.getClauses(); 
 
        for (int i = 0; i < clauses.length; i++) { 
            Clause c = clauses[i]; 
 
            // skip if not date clauses 
            if (!c.getField().equals(FIELD_NAME)) 
                continue; 
 
            String x = c.toString(); 
 
            x = x.substring(x.indexOf(":")+1).replaceAll("\"",""); 
             
            Matcher matcher = pattern.matcher(x); 
            if (!matcher.matches()) { 
                throw new QueryException("Wrong query syntax " + FIELD_NAME 
                        + ":" + x); 
            } 
             
            // inclusive 
            TermRangeQuery rangeQuery = new TermRangeQuery(FIELD_NAME, matcher 
                    .group(1), matcher.group(2), true, true); 
             
             
            rangeQuery.setBoost(0.0f); // trigger filterization 
 
            output.add(rangeQuery, BooleanClause.Occur.MUST); 
 
        } 
 
        return output; 
    } 
中间那几句代码,我们可以看到它实现上是调用了lucene的TermRangeQuery。类写完后当然就是要写plugin.xml,这是插件的必备文件,它通知NUTCH加载此插件。
文件内容大概如下:
Xml代码 
<plugin 
   id="query-lastModified" 
   name="LastModified Query Filter" 
   version="1.0.0" 
   provider-name="nutch.org"> 
 
   <runtime> 
      <library name="query-lastModified.jar"> 
         <export name="*"/> 
      </library> 
   </runtime> 
 
   <requires> 
      <import plugin="nutch-extensionpoints"/> 
   </requires> 
 
   <extension id="org.apache.nutch.searcher.lastModified" 
              name="Nutch LastModified Query Filter" 
              point="org.apache.nutch.searcher.QueryFilter"> 
      <implementation id="LastModifiedQueryFilter" 
                      class="org.apache.nutch.searcher.lastModified.LastModifiedQueryFilter"> 
        <parameter name="fields" value="lastmodified"/> 
      </implementation> 
       
   </extension> 
 
</plugin> 
id那些大家用过spring那些应该都清楚的,是插件的名字。extension中的point是指插件点,是指插件继承哪个类,name只是描述而已。implementation中的id也只是名字而已,而class表明类的具体类名,要包括包名,parameter表明它是针对哪个field,这有有raw-fields和fields两种。这时我暂时没有用到raw-fields,没怎么了解,一般情况下都用fields。
4)当写完配置文件和插件文件后就需要写编译文件build.xml,很简单,只有几行,内容如下:
Xml代码 
<project name="query-lastModified" default="jar-core"> 
  <import file="../build-plugin.xml"/> 
</project> 
这里的name表明生成的jar包的名称,jar-core表明生成主要的jar包,由于ant没怎么用过,就先不研究了。
import是指把文件导入,也可以理解成在编译buil-plugin.xml时,会自动到这里进行查找,然后进行编译生成JAR包。
5)这里的配置,我们知道,肯定还要再配置build-plugin.xml。
有两个地方需要添加,<target name="deploy"> 内添加<ant dir="query-lastModified" target="deploy"/>表明它要进行部署。
另外在<target name="clean">内添加<ant dir="query-lastModified" target="clean"/>表明在部署前进行清理。
6)这些东西配置完成之后就需要更改nutch-default,把我们添加的插件配置到前面所讲的plugins.include标签内。
7)这样完成之后我们就可以用ant进行编译生成jar包和job包,拷贝过去覆盖原来的即可。
这样,我们的插件开发就完成了。
分享到:
评论

相关推荐

    Nutch_插件深入研究

    通过具体实例,读者可以更好地理解Nutch插件是如何在实际场景中发挥作用的,以及如何根据自身需求开发和集成插件。 #### 五、在Eclipse中使用Ant构建插件 虽然Nutch插件可以通过命令行工具构建,但在Eclipse中使用...

    Nutch插件机制

    本文将详细介绍Nutch插件机制的核心概念、工作原理以及如何开发和使用插件。 #### 二、Nutch插件机制的重要性 Nutch之所以采用插件机制,主要有以下三个原因: 1. **可扩展性**:通过插件,Nutch允许用户根据自己...

    Nutch插件开发文档

    接下来,我们将详细介绍如何创建一个新的Nutch插件。 1. **使用Eclipse创建Maven项目**:首先,需要在Eclipse环境中创建一个新的Maven项目。Maven是一个项目管理和综合工具,可以帮助管理项目的构建过程。 2. **...

    Nutch插件开发和服务器发布流程

    ### Nutch插件开发与服务器发布流程详解 ...综上所述,从开发到发布Nutch插件的过程涉及多个步骤,包括环境搭建、插件编写、服务器配置和数据清理等。每个步骤都至关重要,需要仔细操作以确保插件能够正常工作。

    Nutch中文分词插件的编写与配置

    Nutch中文分词插件的编写与配置,由于Internet的迅猛发展,使得用户查找信息犹如大海捞针,而搜索引擎则能帮用户很好的解决这个问题。 Nutch是用java语言开发的,基于Lucene的完整的网络搜索引擎,并采用插件机制进行...

    基于Nutch 的插件系统的原理分析

    本文旨在深入分析Nutch插件系统的原理,并探讨其如何实现良好的扩展性和灵活性。 #### 二、Nutch搜索引擎概述 ##### 2.1 Nutch简介 Nutch是一款基于Java语言编写的开源搜索引擎。最初由俄勒冈州立大学发起,2005...

    Nutch_的配置文件

    同时,对于Nutch插件,开发者也需要编写相应的配置文件来设定插件的行为,如设置URL过滤规则、解析策略等。 总之,理解和熟练掌握Nutch的配置文件及其加载机制是有效利用Nutch的关键步骤,它有助于构建高效、定制化...

    Nutch入门教程 高清 带书签

    四、Nutch插件系统 Nutch的强大之处在于其插件机制,用户可以根据需求编写自己的插件,如自定义解析器、URL过滤器、索引器等。Nutch的核心组件包括:`fetcher`(负责下载网页)、`parse`(解析HTML)、`index`(创建...

    nutch

    通过阅读此教程,你可以了解如何搭建 Nutch 爬虫环境,编写自定义插件,以及进行定制化抓取和索引。 总结来说,Nutch 是一个强大的开源网络爬虫工具,借助 Hadoop 实现了大规模的网页抓取和搜索功能。学习和使用 ...

    nutch-1.5.1源码

    5. **插件开发**:学习如何为Nutch编写和集成插件,以适应不同的需求。 通过分析和学习Nutch-1.5.1源码,开发者不仅可以掌握搜索引擎的核心技术,还能进一步提升在大数据处理、分布式系统和Java编程方面的专业能力...

    nutch1.2 java project

    Nutch 1.2 是一个开源的网络爬虫项目,基于 Java 编写,用于抓取互联网上的网页并建立索引。这个项目是 Apache Software Foundation 的一部分,它为大规模的数据采集提供了强大的工具。Nutch 1.2 版本相对于早期版本...

    nutch入门.pdf

    编写插件部分讲解了如何开发自己的插件,并探讨了其工作原理。 最后,文档还探讨了Nutch的应用前景,说明Nutch除了用作基础的搜索引擎外,还可以作为一种扩展性很强的搜索工具,为不同的信息载体提供搜索服务。附录...

    nutch1.2 java的project

    Nutch 1.2 是一个开源的Web爬虫项目,基于Java开发,它主要用于抓取互联网上的网页并进行索引。这个项目是Apache Lucene的一部分,提供了...在实践中,你可能还需要根据实际需求编写自己的插件,以扩展Nutch的功能。

    nutch09版本亲测好用

    Nutch 的核心设计之一是其插件系统,允许用户通过编写插件来扩展其功能,例如添加新的解析器、链接过滤器或索引策略。 9. **应用范围**: Nutch 0.9 适用于需要大规模网页抓取和数据分析的场景,如市场研究、竞争...

    nutch 初学文档教材

    8.2 插件机制---plugin........45 8.2.1 什么是plugin......45 8.2.2 使用plugin的好处.......45 8.2.3 plugin工作原理...46 8.2.4 编写plugin47 8.3 API接口.......53 8.3.1使用Nutch API....53 8.3.2使用Open...

Global site tag (gtag.js) - Google Analytics