本站首页    管理页面    写新日志    退出


«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31


公告
 本博客在此声明所有文章均为转摘,只做资料收集使用。

我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:
日志总数:1304
评论数量:2242
留言数量:5
访问次数:7590988
建立时间:2006年5月29日




[Apache(jakarta)]【转载】Nutch 0.8笔记--Google式的搜索引擎实现
软件技术

lhwork 发表于 2006/12/13 15:55:01

原文地址:http://www.blogjava.net/calvin/archive/2006/08/09/62507.html 作者:江南白衣     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类来理解爬行的过程。 这里有一幅更直观的图: 500)this.width=500'>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onmouseover="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open('http://wiki.media-style.com/download/attachments/552/workflow.png');}" onmousewheel="return imgzoom(this);" alt="" border="0"> 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> 最后是八卦,Dedian同志翻译的Doug Cutting 访谈录 -- 关于搜索引擎的开发。 最最后,感谢创造 "C++ 必知必会" 这个短语的译者500)this.width=500'>


阅读全文(4152) | 回复(-1) | 编辑 | 精华
 


回复:【转载】Nutch 0.8笔记--Google式的搜索引擎实现
软件技术

ADFS(游客)发表评论于2007/6/27 17:56:54

[url=http://www.662729.cn]热血江湖私服[/url] [url=http://www.89491.cn]热血江湖私服[/url][url=http://www.zhaoztsf.cn]热血江湖私服[/url]  [url=http://www.88cssf.cn]热血江湖私服[/url] [url=http://www.511188.cn]热血江湖私服[/url]


个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
 


回复:【转载】Nutch 0.8笔记--Google式的搜索引擎实现
软件技术

56.21(游客)发表评论于2007/5/15 15:47:12

传世私服 传奇世界私服 传奇世界私服 传世私服 传世私服 传奇世界私服 传世私服 魔兽世界私服 魔兽私服 传奇世界私服 传奇3私服 传奇世界私服 私服

个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
 


» 1 »

发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.541 second(s), page refreshed 144763068 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号