Nutch是一个基于Lucene,类似Google的完整网络搜索引擎解决方案,基于Hadoop的分布式处理模型保证了系统的性能,类似Eclipse的插件机制保证了系统的可客户化,而且很容易集成到自己的应用之中。
Nutch 0.8 完全使用Hadoop重写了骨干代码,另有很多地方作了合理化修正,非常值得升级。
1.Nutch 0.8 的安装与运行
nutch 0.7.2的中文安装文档满街都是,nutch 0.8的安装文档见Tutorial (0.8) , 要注意两点:
一是 crawl命令里的urls参数从指定文件变为了指定目录, 即原来的urls 要改存到urls/foo 里。
二是 nutch-default.xml里http.agent.name属性默认为空,必须在nutch-site.xml中为该属性设值,否则会出错。
注意nutch 爬行时的信息用log4j输出在/logs 目录下了,默认不再直接输出到屏幕,除非你在配置文件里设fetcher.verbose为true。
Luke(http://www.getopt.org/luke) 是一个必备的索引阅读工具。
另外,nutch需要在unix下奔跑,如果要装在windows上,大家可以先装个cygwin。(下载它的setup.exe 在线安装很快装完)。
最后,nutch 0.8的recawl 脚本也不同了。
2.Nutch You should know
2.1 一份文档
nutch的文档不多,而且多是安装文档,要深入nutch,就必须一字不漏的阅读:
Introduction to Nutch, Part 1 Crawling 和 Introduction to Nutch, Part 2 Searching
然后就是看源码了,好在nutch的源码非常均匀,简短,没有花哨的技巧,很容易把事情看明白。
2.2 三个目录
首先理解nutch的三个数据目录:
1.crawdb,linkdb 是web link目录,存放url 及url的互联关系,作为爬行与重新爬行的依据,页面默认30天过期。
2.segments 是主目录,存放抓回来的网页。页面内容有bytes[]的raw content 和 parsed text的形式。nutch以广度优先的原则来爬行,因此每爬完一轮会生成一个segment目录。
3.index 是lucene的索引目录,是indexs里所有index合并后的完整索引,注意索引文件只对页面内容进行索引,没有进行存储,因此查询时要去访问segments目录才能获得页面内容。
2.3 爬行过程
爬行过程在Introduction to Nutch, Part 1 Crawling 里已有详细说明,或许直接看Crawl类来理解爬行的过程。
这里有一幅更直观的图:
Nutch用入口地址,地址正则表达式,搜索深度三种形式来限制。
因为使用了Hadoop(下篇再讲),Nutch的代码都按照Hadoop的模式来编写以获得分布式的能力,因此要先了解一下Hadoop,明白它Mapper,Reducer, InputFormat, OutputFormat类的作用才能更好的阅读。
1.Fetcher类,在run()里多线程运行FetcherThread,并调用恰当的Protocol插件(支持http,ftp等协议)获取内容,调用恰当的 Parser将内容(html,pdf,excel)分析为文本,然后把内容放到FetcherOutput类里,最后由 FetcherOutputFormat类定义写盘到segments的过程。
2.Indexer类,使用hadoop遍历所有segments 目录,将parseData文件序列化成ParseData类,从中获得各种资料然后调用插件进行索引,最后仍然由ouputFormat类完成写入索引的工作。
注意,如果你仅想使用Nutch的爬虫,而不是其索引功能,可以仿照Indexer重写自己的实现,比如把segments内容直接搬进数据库。
3.Nutch 每条索引记录的字段
url: 作为唯一标标识值,由BasicIndexingFilter类产生。
segment:由Indexer类产生。Nutch抓回来的页面内容放在segments目录,lucene只会索引,不会store原文内容,因此在查询时要以 segment与url作为外键,由FetchedSegments类根据hitsDetail从segments目录获得content。
boost:优先级,由Indexer类调用插件计算产生。
title:显示标题,在BasicIndexingFilter插件中被索引和存储。
content: 主要的被搜索项,在BasicIndexingFilter插件中被索引。
2.4 搜索过程
Nutch提供了一个Fascade的NutchBean类供我们使用,一段典型的代码如下
NutchBean bean = new NutchBean();
Query query = Query.parse(args[0]);
Hits hits = bean.search(query, NUM_HITS,"title",true);
for (int i = 0; i < hits.getLength(); i++) {
Hit hit = hits.getHit(i);
HitDetails details = bean.getDetails(hit);
String title = details.getValue("title");
String url = details.getValue("url");
String summary =bean.getSummary(details, query);
}
这里NutchBean为我们做了几样事情:
一是按Title field来排序。
二是支持分布式查询,如果有配置servers,就会使用hadoop的IPC系统,调用所有server上的nutchBeans,最后规约出总的结果。
三是每个站点像Google一样只显示分数最高的一页,如果用户还想看同站的其他结果,就需要进一步调用API访问。
四是生成Summary,从segments目录按segments和url 获得content, 并按一定算法抽取出像Google一样的包含关键字的文档片断。
3. 修改源码或编写插件
Nutch的源码很容易修改和重新编译,注意新编译的class要压回nutch-0.8.job(实际是一个jar)才能生效。
Nutch的插件机制及度类似Eclipse, 详看http://wiki.apache.org/nutch/WritingPluginExample,只要实现某个插件接口,然后在plugins.xml里定义class,扩展点和依赖的jar,如
<plugin id="index-basic" version="1.0.0" provider-name="nutch.org">
<runtime>
<library name="index-basic.jar">
<export name="*"/>
</library>
</runtime>
<requires>
<import plugin="nutch-extensionpoints"/>
</requires>
<extension id="org.apache.nutch.indexer.basic"
name="Nutch Basic Indexing Filter"
point="org.apache.nutch.indexer.IndexingFilter">
<implementation id="BasicIndexingFilter" class="org.apache.nutch.indexer.basic.BasicIndexingFilter"/>
</extension>
</plugin>
分享到:
相关推荐
【Nutch 0.8 知识点详解】 ...总之,Nutch 0.8 是一个强大的搜索引擎框架,利用 Hadoop 提供了分布式爬取和索引能力。通过理解其核心组件、目录结构和爬行流程,开发者可以有效地构建和定制自己的搜索引擎解决方案。
《Lucene2.0+Nutch0.8 API帮助文档》是一个综合性的技术资源,它包含了对Lucene 2.0和Nutch 0.8这两个关键的开源搜索引擎库的详细接口和功能说明。这两个组件在信息检索、全文搜索以及网络爬虫领域有着广泛的应用。 ...
### 开发基于Nutch的集群式搜索引擎 #### Nutch背景知识与架构 Nutch是一款开源搜索引擎,使用Java语言编写,并且依赖于Lucene这一高性能全文搜索引擎库。自Nutch 0.8.0版本起,它完全运行在Hadoop平台上,这使...
[硕士论文]_基于Nutch的垂直搜索引擎的分析与实现.pdf 一个例子学懂搜索引擎(lucene).doc 中文搜索引擎技术揭密.doc 九大开源搜索引擎介绍.txt 基于Nutch的搜索引擎技术.pdf 基于开源工具搭建小型搜索引擎.pdf 整合...
### Nutch 0.8.x 教程:深入解析企业级搜索引擎技术 #### 一、基础知识与需求概览 Nutch是一款开源的网络爬虫工具,由Apache软件基金会开发,旨在帮助用户抓取互联网上的信息并构建自己的搜索引擎。在本教程中,...
分布式搜索引擎的实现和优化是当前信息技术研究的热点,而Nutch和Hadoop是实现分布式搜索引擎的关键技术。本文将对基于Nutch和Hadoop的分布式搜索引擎进行深入探究。 首先,分布式系统是现代搜索引擎的重要组成部分...
### Nutch框架:一个灵活与可扩展的开源搜索引擎 #### 基本概念与起源 Nutch是一款由Nutch组织发起、多个实验室如CommerceNet Labs共同研发的开源Web搜索引擎。其设计初衷旨在提供一个透明、公正的全球网络搜索...
基于Nutch技术的主题搜索引擎实现_李东海.caj
因此,本文在开源的Nutch 搜索引擎架构的基础, 通过构建电力行业词典,利用改进的空间向量算法对抓取内容的相关度进行计算,并对相关内容进行过滤,结合主流的PageRank算法对搜索结果综合排序,并嵌入访问控制模块...
Nutch是一个优秀的开放源代码的Web搜索引擎。虽然Nutch的页面排序方法比较合理,但是很多情况下仍然不能 满足需要。分析开源搜索引擎Nutch代码,研究了Nutch的页面排序方法。在Nutch原有的结构基础上提出了3种修改...
### nutch+lucene开发自己的搜索引擎知识点总结 #### 一、概览 - **标题与描述**: 本资料“nutch+lucene开发自己的搜索引擎ch3.pdf”聚焦于介绍如何使用Nutch和Lucene来构建自己的搜索引擎,特别强调了第三章:...
Nutch技术的主题搜索引擎实现主要涉及的是开源搜索引擎系统Nutch的构建和优化,它是一个基于Java开发的全文搜索引擎项目,由Apache软件基金会维护。Nutch在Web抓取、索引、搜索等方面提供了完整的解决方案,是大数据...
基于Nutch的搜索引擎系统的研究与实现
《lucene+nutch搜索引擎开发源码1》是一个包含开源搜索引擎项目Lucene和Nutch源代码的压缩包,主要针对搜索引擎开发的学习和实践。这个压缩包是书籍《lucene+nutch搜索引擎开发》的一部分,由于源码量较大,因此分为...
《Lucene+Nutch搜索引擎开发:王学松源代码解析》 在信息技术日新月异的今天,搜索引擎已经成为了人们获取信息的重要工具。Lucene和Nutch是两个在开源社区广泛使用的搜索引擎技术,它们为开发者提供了构建高效、可...
在探讨“Lucene+Nutch搜索引擎开发”这一主题时,我们需要深入了解Lucene与Nutch这两个开源项目的功能、工作原理以及如何将它们结合起来构建一个高效的搜索引擎。 ### Lucene简介 Lucene是一个高性能、全功能的...
OCR_FontsSearchEngine, 一种超立方体Nutch和PHP的OCR搜索引擎 Silex框架 ;thiagoalessio ;nutch1.10+solr4.10.4 ;``` shell