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对中文的网页进行语言定位的使用,有时候很是不准确的。
分享到:
相关推荐
Nutch 插件机制是其核心功能之一,它允许开发者轻松地扩展Nutch的功能,以适应不同的数据处理需求。Nutch 是一个开源的网络爬虫项目,主要用于收集、索引和搜索互联网上的信息。通过插件机制,Nutch可以处理各种不同...
Nutch是用java语言开发的,基于Lucene的完整的网络搜索引擎,并采用插件机制进行设计,通过对扩展点的扩展, 用户可以开发自己的各类插件。由于Nutch的分词器对中文只进行单字切分,若要实现较好的对中文信息的搜索查 询,...
- **强大的插件机制**:通过Nutch插件机制,可以根据不同需求灵活定制抓取和解析规则,提高系统使用性和开发效率。 3. **Solr的作用** - **分布式索引**:Solr集群能够在多台机器上并行执行,提高检索速度。 - *...
3. **Nutch插件的配置文件**:每个Nutch插件都可能有自己的配置文件,这些文件在插件被加载时自动读取。例如,过滤器(filter)插件通常有自己的配置,用于设定过滤规则。 配置文件的加载顺序决定了配置的优先级,...
Nutch的强大之处在于其插件机制,用户可以根据需求编写自己的插件,如自定义解析器、URL过滤器、索引器等。Nutch的核心组件包括:`fetcher`(负责下载网页)、`parse`(解析HTML)、`index`(创建索引)和`scoring`...
插件机制是Nutch灵活性的重要体现,它允许用户通过插件来扩展Nutch的功能。编写插件部分讲解了如何开发自己的插件,并探讨了其工作原理。 最后,文档还探讨了Nutch的应用前景,说明Nutch除了用作基础的搜索引擎外,...
通过多种方式将各种数据源统一建立索引进行检索,对于非结构化文本的Web页面信息采用网络爬虫方式获取数据,对于结构化文档数据源可以通过Lucene接口和Nutch插件机制与第三方类库相结合来进行文档分析处理,对于...
4. **插件系统**:Nutch 的强大之处在于它的插件机制,允许用户自定义处理流程。常见的插件有解析器(如 HTML 解析)、分割器、索引器等。尽管压缩包中未包含插件,但你可以根据需求从 Nutch 的官方网站或其他开源...
6. **配置与插件(Configuration & Plugins)**:Nutch允许开发者通过配置文件定制爬虫的行为,并提供了一套插件系统,方便扩展其功能。例如,你可以编写自定义的URL过滤器、解析器或索引增强插件。 在研究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...
Nutch的插件机制允许用户扩展Nutch的功能,例如增加新的抓取协议、改进搜索算法等。插件机制增加了Nutch的灵活性和可扩展性。 **8.3 API接口** Nutch提供了API接口,允许开发者集成Nutch的功能到自己的应用程序中...
Nutch的应用涵盖了修改源码、插件机制(plugin)、API接口的使用以及Nutch的应用前景。通过编写plugin,用户可以扩展Nutch的功能,实现更多定制化的搜索需求。Nutch API和OpenSearch API则允许开发者在应用程序中...
8. **插件系统**:Nutch具有强大的插件架构,允许开发者轻松添加新的功能,如新的解析器、新的索引器或新的URL过滤规则。插件开发可以极大地扩展Nutch的功能。 9. **索引存储**:Nutch通常使用Apache Lucene作为其...
框架设计灵活,支持插件机制,方便开发者根据需求定制。 2. **Fetcher模块**:负责从Web上下载网页。它使用多线程技术,能够高效地处理大量HTTP请求,并且支持断点续传,提高抓取效率。 3. **Parser模块**:解析...
1. **Nutch 爬虫机制** - **种子URL**:爬虫的起点是一组种子URL,这些URL会被添加到待抓取的队列中。 - **调度器**:调度器根据策略决定下一个要抓取的URL,如按照优先级、深度优先或广度优先等。 - **Fetcher**...