Plugin插件机制为Nutch提供了很强大的扩展性,曾经看到一篇文章《不选择使用Lucene的6大原因》,其中就提到lucene的API不够开放。Lucene的OO设计的非常糟,尽管有包package和类class,但是Lucene的设计基本上没有设计模式的身影。这是不是c或者c++程序员写java程序的通病?Lucene中没有使用接口Interface,等等。在Lucene的2.0版本中就解决了这些问题,同时在Nutch的Plug实现中,完全没有这种问题,正是因为使用了Interface,Nutch的Plugin插件机制才如此的灵活,Nutch的Plugin完全基于Eclipse 2.x中的插件机制。如果你非常了解Eclipse 2.x的插件机制,完全可以跳过Nutch插件机制这一段。
Nutch插件机制 Nutch提供插件机制,使得开发人员可以根据自己的需要给Nutch开发适合自己需求的Plugin,完成自己想要的操作。Nutch中所有的分析,索引和查询工作都是通过Nutch的Plugin来实现的。 Nutch把自己可以提供的Plugin接口,用一个xml文档来描述。Nutch把这些接口信息,放在Nutch的plugins\nutch-extensionpoints下,Nutch同样认为plugins\nutch-extensionpoints是一个Nutch的Plugin。在plugins\nutch-extensionpoints下的plugin.xml有下面的描述:this file hosts all extension points nutch core code offers. Please not that plugins can define extension points as well to be extendable. 这样所有的Nutch插件都必须是实现自这些extension-points.接口的类。把操作封装成接口,Core Code流程中调用接口方法,标准的Template Pattern。
Nutch是如何加载并调用这些接口的呢? Nutch的PluginRepository是整个插件的加载过程。在installExtensionPoints和installExtensions方法中实现了对整个插件的加载。首先加载插件,然后加载插件的ExtensionPoint。Nutch记录了所有的ExtensionPoint,在每个ExtensionPoint中记录了扩展自这个ExtensionPoints的Extension。通过这种关系就可以通过一个ExtensionPoint(Nutch提供的扩展接口),得到所有实现了这个接口的类(Extension)。 Nutch在自己的某个处理流程中通过Config,得到配置中配置加载的这个流程中需要的Extention。例如AnalyzerFactory的Extension加载过程: extensionPoint=PluginRepository.get(conf).getExtensionPoint(NutchAnalyzer.X_POINT_ID) 这样所有实现了NutchAnalyzer这个接口的类(Exctesion)将被取得。然后根据需要调用这些接口。在插件的plugin.xml信息中,有一个parameter节点,存储的名值,是描述这个接口的配置信息。共Nutch查找并确定,是否使用这个接口。 IndexFilter 中使用Filter的过程。就是一个典型的Nutch使用插件IndexFilter,对Document进行Index的过程。
分词过程 Nutch根据不同的语言使用不同的分词器来分词。Nutch如何判定现在分析的网页是那个语言的网页?Nutch使用一个外部Plugin:language-identifier来确定当前分析的网页是那种语言的网页。然后在当前的Document中放入一个名为lang的Field。在进行索引创建和搜索的时候,都会根据lang选择对应语言的Analyzer,如果没有lang的信息,那么Nutch会使用默认的Analyzer对Document建立索引。通过这样的过程就实现了Nutch使用不同的分词器分析不同的网页。 如果使用分词,可以直接修改Nutch的Default分词器。根据我个人的测试,language-identifier对中文的网页进行语言定位的使用,有时候很是不准确的。
相关链接 http://hi.baidu.com/hanjunjie1986/blog/item/82a4c5036734a8753912bb94.html http://hi.baidu.com/sunky/blog/item/316faeafb372cbcd7dd92a6e.html http://www.cnidc8.com/html/2008-03/142.html
|
|
相关推荐
Nutch插件主要分为以下几个类别: 1. **Parser插件**:这类插件负责解析抓取的文档,提取可索引的数据。例如,HtmlParser插件用于解析HTML文档,而MSWordParser插件则用于解析Microsoft Word文档。开发者可以通过...
本部分将简要介绍Nutch插件的实际应用案例,包括中文分词插件、索引字段增强插件等。通过具体实例,读者可以更好地理解Nutch插件是如何在实际场景中发挥作用的,以及如何根据自身需求开发和集成插件。 #### 五、在...
Nutch是用java语言开发的,基于Lucene的完整的网络搜索引擎,并采用插件机制进行设计,通过对扩展点的扩展, 用户可以开发自己的各类插件。由于Nutch的分词器对中文只进行单字切分,若要实现较好的对中文信息的搜索查 询,...
四、Nutch插件系统 Nutch的强大之处在于其插件机制,用户可以根据需求编写自己的插件,如自定义解析器、URL过滤器、索引器等。Nutch的核心组件包括:`fetcher`(负责下载网页)、`parse`(解析HTML)、`index`(创建...
3. **Nutch插件的配置文件**:每个Nutch插件都可能有自己的配置文件,这些文件在插件被加载时自动读取。例如,过滤器(filter)插件通常有自己的配置,用于设定过滤规则。 配置文件的加载顺序决定了配置的优先级,...
Nutch支持多种中文分词工具,如HanLP、jieba和IK Analyzer等,这些工具能够将中文句子分割成有意义的词语,为后续的索引和查询提供基础。 4. **Nutch工作流程**:Nutch的工作流程主要包括URL发现(抓取种子URL并...
通过分析和学习Nutch-1.5.1源码,开发者不仅可以掌握搜索引擎的核心技术,还能进一步提升在大数据处理、分布式系统和Java编程方面的专业能力。这对于从事相关领域工作或是研究搜索引擎优化(SEO)、信息检索和推荐...
Nutch 的工作流程包括几个主要步骤:种子URL生成、网页抓取、分词、链接分析、索引和搜索。这些步骤可以通过 Hadoop 分布式计算框架进行扩展,以处理大规模的网页数据。 3. **抓取框架**: Nutch 0.9 提供了一个...
1. **Nutch 爬虫机制** - **种子URL**:爬虫的起点是一组种子URL,这些URL会被添加到待抓取的队列中。 - **调度器**:调度器根据策略决定下一个要抓取的URL,如按照优先级、深度优先或广度优先等。 - **Fetcher**...
1. **Nutch框架**:Nutch的核心框架提供了爬虫的基本架构,包括种子URL的管理、网页抓取、分词、链接分析等。框架设计灵活,支持插件机制,方便开发者根据需求定制。 2. **Fetcher模块**:负责从Web上下载网页。它...
基于Nutch的中文分词插件实现,张文龙,刘一伟,中文分词是中文垂直搜索引擎中的一个关键技术,分词的好坏直接影响提取文本的精确度。Nutch是一个开源的Web搜索引擎,它为英文用户�
Nutch提供了丰富的插件机制,允许开发者根据需求定制爬虫功能。例如,你可以编写新的解析器来处理不同格式的内容,或者自定义索引策略。项目的“使用说明.txt”文件应该包含了关于如何配置和扩展Nutch的详细指南。 ...
9. **多语言支持**:Nutch 不仅支持英语,还可以通过插件支持其他语言的抓取和索引,如中文、日文等。 10. **搜索接口**:Nutch 提供了一个简单的搜索接口,用户可以通过该接口查询索引库中的内容,实现基本的搜索...
Lucene和Nutch是两个强大的开源搜索和爬虫工具,它们广泛应用于信息检索、网站分析等领域。通过理解这两个工具的核心概念、安装配置过程以及光盘资源的使用,用户可以搭建自己的搜索引擎,实现高效的数据抓取和检索...
6. **自定义开发**:Nutch 提供了丰富的插件机制,允许开发者根据需求自定义解析器、索引器、分词器等。通过修改或创建新的插件,你可以实现特定的抓取策略或处理逻辑。 7. **大数据处理**:Nutch是基于Hadoop构建...
3. **分词与索引**:Nutch使用Apache Lucene库进行文本分析和索引。分词器将网页内容分解为单词或短语,这些词项随后被转换为倒排索引,便于快速的搜索查询。Nutch还支持自定义分词器和过滤器,可以根据具体语言或...
- **Indexing**:解析后的数据经过分析和过滤,形成倒排索引,便于快速查找。 - **Searching**:用户输入查询,Nutch根据索引返回最相关的网页结果。 2. **Nutch工作流程** Nutch的工作流程由一系列工作阶段组成...
2. **《nutch入门学习.pdf》**:这可能是更深入的学习资料,可能包含实战案例和高级特性的讲解,帮助进阶者理解Nutch的内在工作机制。 **五、实践操作** 学习Nutch通常包括以下步骤: 1. **环境准备**:安装Java...