- 浏览: 1185819 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (350)
- Ajax研究 (2)
- javascript (22)
- struts (15)
- hibernate (12)
- spring (8)
- 我的生活 (28)
- jsp (2)
- 我的随笔 (84)
- 脑筋急转弯 (1)
- struts2 (2)
- ibatis (1)
- groovy (1)
- json (4)
- flex (20)
- Html Css (5)
- lucene (11)
- solr研究 (2)
- nutch (25)
- ExtJs (3)
- linux (6)
- 正则表达式 (2)
- xml (1)
- jetty (0)
- 多线程 (1)
- hadoop (40)
- mapreduce (5)
- webservice (2)
- 云计算 (8)
- 创业计划 (1)
- android (8)
- jvm内存研究 (1)
- 新闻 (2)
- JPA (1)
- 搜索技术研究 (2)
- perl (1)
- awk (1)
- hive (7)
- jvm (1)
最新评论
-
pandaball:
支持一下,心如大海
做有气质的男人 -
recall992:
山东分公司的风格[color=brown]岁的法国电视[/co ...
solr是如何存储索引的 -
zhangsasa:
-services "services-config ...
flex中endpoint的作用是什么? -
来利强:
非常感谢
java使用json所需要的几个包 -
zhanglian520:
有参考价值。
hadoop部署错误之一:java.lang.IllegalArgumentException: Wrong FS
plugin(插件)为nutch提供了一些功能强大的部件,举个例子,HtmlParser就是使用比较普遍的用来分析nutch抓取的html文件的插件。
为什么nutch要使用这样的plugin系统?
有三个原因:
1:可扩展性
通过plugin,nutch允许任何人扩展它的功能,而我们要做的只是对给定的接口做简单的实现,举个例子:MSWordParser这个插件是用来分析wordwendang的,它就是一个对parser这个接口的实现
2:灵活性
因为每个人都可以根据自己的需求而写自己的plugin,这样plugin就会有一个很强大的资源库。这样对与应用nutch程序员来说,他可以在自己的搜索引擎上安装符合自己需求的插件,而这些插件就在nutch的plugins中。这对于正在应用nutch的开发者来说应该是一个巨大的福音,因为你有了更多的关于内容抽取的算法来选择,很容易就增加了pdf的分析。
3:可维护性
每个开发者只要关注自己的问题。对于内核的开发者在为引擎内核扩展的同时,为a plug添加一个描述它的接口就可以了。一个plugin的开发者只要关注这个plugin所要实现的功能,而不需要知道整个系统是怎么工作的。它们仅仅需要知道的是plugin和plug之间交换的数据类型。这使得内核更加简单,更容易维护。
plugin相关--什么是plugin,plugin的工作原理
nutch的plugin系统是基于Eclipse 2.x中对插件的使用。plugins对nutch的工作是很重要的。所有的nutch中的parsing(分析),indexing(索引),searching(查询)都是通过不同的plugins来实现的。
在编写一个plugin的时候,你要为一个扩展点添加一个或者更多的扩展项。这些Nutch的扩展点是Nutch在一个plugin中已经定义好了,这个plugin是NutchExtensionPoints(所有的扩展点都会在NutchExtensionPoints plugin.xml这个文件中列出)。每一个扩展点都定义了一个接口,这个接口在扩展时必须被实现。这些扩展点如下:
onlineClusterer-为在线的查询结果提供分组算法的扩展点的接口
indexingFiltering-允许为所索引中的Field添加元数据。所有的实现了这个接口plugin会在分析的过程中顺序的逐个运行
Ontology
Parser
实现这个接口的parser读取所抓取的document,摘取将被索引的数据。如果你要在nutch中为扩展分析一个新内容类型或者从现有的可分析的内容摘取更多的数据。
HtmlParseFilter
为html parser添加额外的元数据
protocol
实现Protocol的plugin可以使得nutch能使用更多的网络协议(ftp,http)去抓取数据
QueryFilter
为查询转换的扩展点
URLFileter
实现这个扩展点的plugin会对nutch要抓取的网页的urls进行限制,RegexURLFilter提供了通过正则表达式来对Nutch爬行网页的urls的控制。如果你对urls还有更加复杂的控制要求,你可以编写对这个urlfilter的实现
NutchAnalyser
为许多语言特定的分析器提供了扩展点
源文件
在plugin的源文件目录中你会找到以下的文件
plugin.xml 向nutch描述这个plugin的信息
build.xml 告诉ant怎样编译这个plugin
plugin的源码
在Nutch使用plugin
如果要在Nutch使用一个给定的plugin,你需要对conf/nutch-site.xml进行编辑并且把plugin的名字添加到plugin.includes中
Nutch plugin系统中的一些概念
编写一个pluginExample
思考编写这样的一个plugin:我们想为一个给定的search term推荐一些与之相关的网页。举个例子,假设我们正在索引网页,当我们注意到有一组网页的内容是关于plugin的,所以我们想如果当某人查询plugin的时候,我们可以推荐他到pluginCentral这个网页,但是同时,也要返回在一般逻辑中的查询结果所有的hits。所以我们将查询结果分成了推荐结果和一般查询结果。
你浏览你的网页然后把一个meta-tags加入网页中,它会告诉plugin这个网页是应该被推荐的。这个tags应该像这样
<meta name="recommended" content="plugins" />为了达到目标我们需要写一个plugin,这个plugin扩展3个不同的扩展点,它们是:HTMLParser:从meta-tags得到推荐的termsIndexingFilter:增加一个推荐Field在索引中。QueryFilter:增加对索引中新Field的查询能力 要建立的文件 首先在plugin的目录中新建一个目录来盛放自己的的plugin,整个plugin我们取名为recommended,然后在这个目录里面 依次建立以下文件: a plugin.xml,这个文件用来向Nutch描述我们新建的plugin a build.xml这个文件告诉编译器应该怎样build这个plugin plugin的源代码则保存在/src/java/org/apache/nutch/parse/recommended/[这里] Plugin.xml
你所建立的plugin.xml应该这样:
<?xml version="1.0" encoding="UTF-8"?>
<plugin
id="recommended"
name="Recommended Parser/Filter"
version="0.0.1"
provider-name="nutch.org">
<runtime>
<!-- As defined in build.xml this plugin will end up bundled as recommended.jar -->
<library name="recommended.jar">
<export name="*"/>
</library>
</runtime>
<!-- The RecommendedParser extends the HtmlParseFilter to grab the contents of
any recommended meta tags -->
<extension id="org.apache.nutch.parse.recommended.recommendedfilter"
name="Recommended Parser"
point="org.apache.nutch.parse.HtmlParseFilter">
<implementation id="RecommendedParser"
class="org.apache.nutch.parse.recommended.RecommendedParser"/>
</extension>
<!-- TheRecommendedIndexer extends the IndexingFilter in order to add the contents
of the recommended meta tags (as found by the RecommendedParser) to the lucene
index. -->
<extension id="org.apache.nutch.parse.recommended.recommendedindexer"
name="Recommended identifier filter"
point="org.apache.nutch.indexer.IndexingFilter">
<implementation id="RecommendedIndexer"
class="org.apache.nutch.parse.recommended.RecommendedIndexer"/>
</extension>
<!-- The RecommendedQueryFilter gets called when you perform a search. It runs a
search for the user's query against the recommended fields. In order to get
add this to the list of filters that gets run by default, you have to use
"fields=DEFAULT". -->
<extension id="org.apache.nutch.parse.recommended.recommendedSearcher"
name="Recommended Search Query Filter"
point="org.apache.nutch.searcher.QueryFilter">
<implementation id="RecommendedQueryFilter"
class="org.apache.nutch.parse.recommended.RecommendedQueryFilter"
fields="DEFAULT"/>
</extension>
</plugin>
Build.xml
<?xml version="1.0"?>
<project name="recommended" default="jar">
<import file="../build-plugin.xml"/>
</project>
The HTML Parser Extension
这是对HtmlParserExtension这个扩展点的实现,它的作用是抓取那些标meta-tags的内容,这样把它们加入正在分析的document中。.
package org.apache.nutch.parse.recommended;
// JDK imports
import java.util.Enumeration;
import java.util.Properties;
import java.util.logging.Logger;
// Nutch imports
import org.apache.nutch.parse.HTMLMetaTags;
import org.apache.nutch.parse.Parse;
import org.apache.nutch.parse.HtmlParseFilter;
import org.apache.nutch.protocol.Content;
import org.apache.nutch.util.LogFormatter;
public class RecommendedParser implements HtmlParseFilter {
private static final Logger LOG = LogFormatter
.getLogger(RecommendedParser.class.getName());
/** The Recommended meta data attribute name */
public static final String META_RECOMMENDED_NAME="Recommended";
/**
* 在html文件中寻找有没有标有meta-tags的内容 */
public Parse filter(Content content, Parse parse, HTMLMetaTags metaTags, DocumentFragment doc) {
// Trying to find the document's recommended term
String recommendation = null;
Properties generalMetaTags = metaTags.getGeneralTags();
for (Enumeration tagNames = generalMetaTags.propertyNames(); tagNames.hasMoreElements(); ) {
if (tagNames.nextElement().equals("recommended")) {
recommendation = generalMetaTags.getProperty("recommended");
LOG.info("Found a Recommendation for " + recommendation);
}
}
if (recommendation == null) {
LOG.info("No Recommendataion");
} else {
LOG.info("Adding Recommendation for " + recommendation);
parse.getData().getMetadata().put(META_RECOMMENDED_NAME, recommendation);
}
return parse;
}
}
The Indexer Extension
这是对索引点的扩展,如果查找到带有meta-tags的内容,就把它命名''recommended'的field中,然后加入document建立索引
package org.apache.nutch.parse.recommended;
// JDK import
import java.util.logging.Logger;
// Nutch imports
import org.apache.nutch.util.LogFormatter;
import org.apache.nutch.fetcher.FetcherOutput;
import org.apache.nutch.indexer.IndexingFilter;
import org.apache.nutch.indexer.IndexingException;
import org.apache.nutch.parse.Parse;
// Lucene imports
import org.apache.lucene.document.Field;
import org.apache.lucene.document.Document;
public class RecommendedIndexer implements IndexingFilter {
public static final Logger LOG
= LogFormatter.getLogger(RecommendedIndexer.class.getName());
public RecommendedIndexer() {
}
public Document filter(Document doc, Parse parse, FetcherOutput fo)
throws IndexingException {
String recommendation = parse.getData().get("Recommended");
if (recommendation != null) {
Field recommendedField = Field.Text("recommended", recommendation);
recommendedField.setBoost(5.0f);
doc.add(recommendedField);
LOG.info("Added " + recommendation + " to the recommended Field");
}
return doc;
}
}
The QueryFilter
当用户进行查找操作的时候,QueryFilter就会被调用,而且对于recommeded中的boost值会影响查询结果的排序。
package org.apache.nutch.parse.recommended;
import org.apache.nutch.searcher.FieldQueryFilter;
import java.util.logging.Logger;
import org.apache.nutch.util.LogFormatter;
public class RecommendedQueryFilter extends FieldQueryFilter {
private static final Logger LOG = LogFormatter
.getLogger(RecommendedParser.class.getName());
public RecommendedQueryFilter() {
super("recommended", 5f);
LOG.info("Added a recommended query");
}
} 让Nutch可以使用你的plugin为了让Nutch使用你的plugin,你需要对conf/nuthc-site.xml这个文件进行编辑,把以下的代码加入<property>
<name>plugin.includes</name>
<value>nutch-extensionpoints|protocol-http|urlfilter-regex|parse-(text|html)|index-basic|query-(basic|site|url)|recommended</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.
</description>
</property> 使用Ant对你的plugin进行编译在之前我们要编辑一下src/plugin/build.xml 这个文件,这是对编译和部署做一些设置你会看到有很多如下形式的行<ant dir="[plugin-name]" target="deploy" />在</target>前添加一新行 <ant dir="reccomended" target="deploy" />Running 'ant' in the root of your checkout directory should get everything compiled and jared up. The next time you run a crawl your parser and index filter should get used.
You'll need to run 'ant war' to compile a new ROOT.war file. Once you've deployed that, your query filter should get used when searches are performed.
plugins和class加载到nutch的问题集合
对plugin开发者来说最棒的事情就是自由了,可以不去理会别的plugin的开发者在做什么,可以自由的使用第三方的jar库。
nutch是怎样解决类加载这个问题的?
Nutch使用了一个非常容易的方法,每一个plugin都有一个属于自己的类加载器,这个class-loader在plugin启动以前将会被初始化
写plugin-by stefan
nutch 0.7中的plugins
如果你要在nutch中应用这些插件,你只需要编辑conf/nutch-site.xml,把你所要用的plugin的名字加入plugin.includes的列表中
clustering-carrot2 - Online Search Results Clustering using Carrot2's Lingo component.
creativecommons - Support for crawling and searching Creative-Commons licensed content.
index-basic - Adds url, content and anchor fields to the index.
index-more - Adds date, content-length, contentType, primaryType and subtype fields to the index.
languageidentifier - Adds a lang field to the index and allows you to query against it.
ontology - Helps refine queries based on owl files.
parse-ext - A wrapper that invokes external command to do real parsing job.
parse-html - Parses HTML documents
parse-js - Parses JavaScript
parse-mp3 - Parses MP3s
parse-msword - Parses MS Word documents
parse-pdf - Parses PDFs
parse-rss - Parses RSS feeds
parse-rtf - Parses RTF files
parse-text - Parses text documents
protocol-file - Retreives documents from the filesystem
protocol-ftp - Retreives documents through ftp
protocol-http - Retreives documents through http
protocol-httpclient - Retreives documents through http and https
query-basic - Runs queries against content, url and anchor fields
query-more - Runs queries against date, content-length, contentType, primaryType and subType fields.
query-site - Runs queries against site field
query-url - Runs queries against url field.
urlfilter-prefix
urlfilter-regex
Additional Plugins in Dev Branch (0.8)
analysis-de
analysis-fr
lib-commons-httpclient
lib-http
lib-jakarta-poi
lib-log4j
lib-lucene-analyzers
lib-nekohtml
lib-parsems
parse-msexcel - Parses MS Excel documents
parse-mspowerpoint - Parses MS Powerpoint documents
parse-oo - Parses Open Office and Star Office documents (Extentsions: ODT, OTT, ODH, ODM, ODS, OTS, ODP, OTP, SXW, STW, SXC, STC, SXI, STI)
parse-swf - Parses Flash SWF files
microformats-reltag - Adds rel-tag fields to the index and runs queries against them.
parse-zip
clustering-carrot2
发表评论
-
nutch-1.2结合hadoop分布式搜索
2011-07-13 10:50 2667nutch-1.2结合hadoop分布式搜索。 1、网上关于 ... -
nutch-1.x分布式索引指定
2011-07-04 17:15 12811、nutch-1.x中在crawl.java中。最后有这么一 ... -
在nuthc中加入中文分词
2011-05-15 11:41 607nutch实用的分词是默认的,对中文支持的不是很好。 网上有 ... -
nutch1.2中加入中文分词以及搜索错误解决
2011-03-02 12:15 1435在nutch当中加入中文分词。这里我使用的IK_Analyze ... -
使用ant编译时错误:Specify at least one source--a file or resource
2011-02-22 11:12 2462将命令环境切换到Nutch目录下,执行ant命令。出现如下错误 ... -
readdb导致fetch job中断的问题
2011-02-16 13:39 1661Nutch readdb命令可以用来统计目前crawldb库里 ... -
Nutch fetch job中时间的分配比例
2011-02-16 13:38 1336下面是nutch fetch job中map shuffle ... -
nutch UI 多台机子部署有关jetty配置servlet的问题
2010-01-18 17:35 2469我们jetty是一个小型的web服务器,可以嵌入到程序当中去, ... -
nutch中plugin.folders的配置
2009-12-21 18:07 2427今天在公司做nutch的调试时,犯了一个低级的错误,在这里记录 ... -
把另外的一个项目加入了nutch中来
2009-12-20 23:59 1093周末在家闲的慌,把在公司搞的nutch拿回来在家里试着做了下, ... -
今天来用一个例子来详细讲解下nutch当中到底是如何自定义插件的
2009-12-17 10:29 1664接上面一篇,今天来用一个例子来详细讲解下nutch当中到底是如 ... -
nutch plugin详细分析
2009-12-16 18:06 1394当某个插件需要被加载时, Nutch 会加载所有插件的相关接口 ... -
nutch plugin的流程以及如何自定义plugin
2009-12-16 18:04 1995PluginRepository 是plugin的入口,保存了 ... -
如何读取nutch抓取数据
2009-12-16 17:43 3608如何读取nutch抓取数据 1.首先nutch的配置已经在博 ... -
Nutch1.0 Ui启动在tomcat中的配置
2009-12-07 14:09 1355<!-- @pa ... -
nutch如何才能抓取到动态的url
2009-11-25 15:27 5352http://www.tianya.cn/new/Tianya ... -
配置完成nutch容易出现的错误
2009-11-25 11:50 24841.1.2 运行crawl报错Job failed Ex ... -
在eclipse中如何配置nutch1.0
2009-11-25 11:44 1434<1>: 首先从http://apache.eto ... -
nutch的基本工作流程理解
2009-11-21 00:17 1900(一):Nutch的工作流程: Crawdb、l ... -
cygwin配置说明
2009-11-21 00:15 2363开始,一步一步来:了解Cygwin的人都知道,就是到 : ht ...
相关推荐
Nutch Htmlunit Plugin 重要说明: 当前项目基于Nutch 1.X系列已停止更新维护,转向Nutch 2.x系列版本的新项目:http://www.oschina.net/p/nutch-ajax 项目简介 基于Apache Nutch 1.8和Htmlunit...
Nutch爬虫系统分析 Nutch是一款开源的网络爬虫系统,能够高效地抓取网页内容并将其存储在数据库中。本文将对Nutch爬虫系统进行详细的分析,包括Nutch的体系结构、抓取部分、配置文件分析等方面。 一、Nutch简介 ...
4. nutch基本原理分析...23 4.1 nutch的基本组成.23 4.2 nutch工作流程.....23 5. nutch工作流程分析...25 5.1 爬虫...25 5.1.1 工作策略...25 5.1.2 工作流程分析....25 5.1.3 其它..27 5.2 索引...27 5.2.1 索引...
具体而言,将`plugin.folders`参数改为`"./src/plugin"`,以确保Nutch能够识别到项目的插件目录。 #### 步骤5:设置URL文件 在配置好基本环境后,还需要创建一个包含起始URL的文件,通常命名为`urls`,并将其放置...
要使用Nutch插件,开发者需要在`conf/nutch-site.xml`配置文件中添加插件的名称到`plugin.includes`列表中。每个插件都有一个`plugin.xml`文件,用于描述插件信息,以及一个`build.xml`文件,指导Ant构建工具如何...
基本原理分析部分详细介绍了Nutch的工作流程,包括爬虫的工作策略和流程、索引的主要过程以及搜索和分析的过程。索引部分特别提到了倒排索引(inverted index)的构建过程,它是搜索引擎中用于快速检索的关键技术之...
在应用方面,提到了如何修改源码和使用插件机制(plugin),以及如何利用Nutch API和OpenSearch API接口。插件机制是Nutch灵活性的重要体现,它允许用户通过插件来扩展Nutch的功能。编写插件部分讲解了如何开发自己...
5. **修改全局配置**:在`conf/nutch-default.xml`中,需要更新`plugin.includes`配置项,以包含新开发的插件。 #### 三、Mysql与Nutch的集成 除了插件开发,Nutch还支持将爬取的数据存储到MySQL数据库中。这一...
Nutch 是一个开源的网络爬虫项目,用于抓取网页并建立索引。它与 Hadoop 紧密集成,支持大规模数据处理。...当你成功配置好 Nutch 环境后,就可以开始使用 Nutch 进行网页抓取和索引,为数据分析和搜索引擎建立基础。
而Nutch不仅包含Lucene的索引能力,还集成了网页抓取、链接分析等更多功能,是一个全面的搜索引擎解决方案。 #### 2. Nutch的安装与配置 **2.1 JDK的安装与配置** Nutch依赖于Java环境,因此首先需要在服务器或...
这通常涉及到修改`conf/nutch-site.xml`文件,在`plugin.includes`属性中添加插件名称。 #### 五、示例:推荐插件开发 假设我们需要开发一个插件,用于推荐与特定关键词相关的网页。例如,当用户搜索“plugin”时...
插件(Plugin)作为Nutch的核心组件之一,为用户提供了一种灵活的方式来定制和扩展Nutch的功能。通过这种方式,不仅可以增强Nutch的原有功能,还能根据特定的需求添加新的功能模块。 Nutch插件系统具有以下优势: ...
此外,Nutch也可以作为数据挖掘、文本分析等项目的前期数据获取工具。 6. **Nutch社区与资源** Nutch有一个活跃的开发者社区,提供了详细的文档、教程和示例代码,帮助用户快速入门并解决问题。Apache官方网站上的...
### Nutch 2.3.1 安装与配置指南 #### 一、配置 ant 环境 在安装 Nutch 之前,首先需要确保环境中已经安装了 Apache Ant 工具,因为 Nutch 的构建过程依赖于 Ant。以下是具体步骤: 1. **下载 ant**: - 访问 ...
### Nutch 1.7 二次开发培训讲义之腾讯微博抓取分析 #### 一、概述 Nutch 是一个开源的网络爬虫项目,它提供了灵活的数据抓取能力,并支持二次开发定制功能。本篇培训讲义主要针对的是如何使用 Nutch 1.7 版本对...
4. nutch基本原理分析...23 4.1 nutch的基本组成.23 4.2 nutch工作流程.....23 5. nutch工作流程分析...25 5.1 爬虫...25 5.1.1 工作策略...25 5.1.2 工作流程分析....25 5.1.3 其它..27 5.2 索引...27 ...
(1)在conf/nutch-default.xml中,将`plugin.folders`的值更改为`./src/plugin`。 (2)创建一个名为urls的目录,里面放一个txt文件,包含你要抓取的初始网址。在conf/nutch-site.xml中,添加`http.agent.name`...
### 基于Nutch的插件系统的原理分析 #### 一、引言 随着互联网技术的迅猛发展,搜索引擎作为信息检索的重要工具,在日常生活及工作中扮演着越来越重要的角色。然而,传统的搜索引擎架构往往存在难以扩展和升级的...
工作流程分析进一步深入到爬虫的工作策略和流程、索引过程、搜索和分析等部分,并对Nutch的其他一些特性进行了介绍。 8. Nutch分析方法和工具 介绍了Nutch的分析方法和工具,例如Crawldb、Linkdb、Segments和Index...
Nutch 1.x插件,允许对网页的入站和出站进行索引。 默认情况下,此插件会忽略那些主机与被索引网页的主机匹配的出站链接。 通过将以下内容添加到您的nutch-site.xml可以绕过此行为。 < name>outlinks.host.ignore...