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,如
<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>
参考 https://today.java.net/pub/a/today/2006/01/10/introduction-to-nutch-1.html
https://today.java.net/pub/a/today/2006/02/16/introduction-to-nutch-2.html
相关推荐
【标题】:“(jsp+ajax)实现了类似google的搜索引擎(源代码)”是一个基于JSP、AJAX和JavaScript技术构建的Web应用项目,旨在提供一种类似于谷歌搜索引擎的用户体验。这个项目的核心在于利用AJAX实现动态数据交互,...
"搜索平台"可能是指该系统支持多搜索引擎整合,用户可以通过一个统一的接口访问不同的搜索引擎,如百度、谷歌、必应等,实现一站式的搜索体验。"网址快速搜索"和"快速在不同搜索引擎上找到结果"暗示了它的速度优势,...
搜索引擎的类型多样,包括但不限于全文索引、目录索引、元搜索引擎、垂直搜索引擎、集合式搜索引擎、门户搜索引擎与免费链接列表等。其中,百度和谷歌等是目前市场上最知名的搜索引擎。 #### QSearch的设计与实现 ...
搜索引擎需要实时跟踪互联网上的变化,及时更新索引,同时又要兼顾性能,因此可能会有基于时间戳或增量式的更新策略,以及智能的缓存机制来减少不必要的计算。 最后,安全性也是搜索引擎不可忽视的一部分。谷姐搜索...
### Google搜索引擎原理详解 #### 一、概述与背景 Google搜索引擎是互联网时代最具影响力的信息检索工具之一,其设计理念和技术架构引领了搜索引擎行业的变革与发展。本文旨在深入探讨Google搜索引擎的工作原理,...
【PHP搜索引擎源码页面】是一个关于使用PHP编程语言构建搜索引擎的项目。...深入研究这些文件内容,可以进一步了解这个PHP搜索引擎的具体实现细节和使用方法。不过,具体的内容需要实际查看文件才能确定。
可分为全文搜索引擎、目录式搜索引擎和元搜索引擎。全文搜索引擎通过索引网页全文进行匹配,目录式依赖人工编辑的分类目录,而元搜索引擎则结合多个搜索引擎的结果。 2.3.2 按检索内容范围 包括综合型搜索引擎和...
标题中的“集合众多搜索引擎 第一搜索网站 万能超级搜索引擎V7.1”指的是一个集成多种搜索引擎功能的在线平台,可能是一个聚合型的搜索引擎工具,旨在提供一站式的搜索体验。这种工具通常会整合Google、Bing、百度等...
一个可切换搜索引擎的导航网页搜索框,为用户提供了一站式的便捷搜索体验,允许用户根据需求快速切换不同的搜索引擎,如百度、谷歌、搜狗等。这样的设计旨在满足不同用户对于搜索结果偏好和效率的需求。 首先,我们...
1. **搜索引擎工作原理**:搜索引擎首先通过爬虫程序(如Googlebot、BingBot等)自动抓取互联网上的网页,然后对抓取的网页进行索引,以便用户在搜索时快速找到相关信息。对于ASP网站,确保爬虫能顺利访问和理解页面...
8. **响应式设计**:为了确保在不同设备上都能良好工作,自定义搜索引擎应考虑响应式设计,以适应各种屏幕尺寸和分辨率。 9. **性能优化**:合理使用API调用次数和速率限制,避免因频繁请求导致的额外费用和用户...
1. 增强用户体验:快速的加载速度、响应式设计、易用的导航等都是提升用户体验的关键,也是搜索引擎排名的重要考量因素。 2. 外部链接:来自权威网站的自然链接能显著提升网站的信誉度。通过高质量的内容和网络合作...
随着时间的推移,这些目录式搜索引擎逐渐被全文搜索引擎取代,如AltaVista和Google,它们能够对网页内容进行索引和搜索,极大地提高了检索效率。全文搜索引擎的发展也推动了网络爬虫技术的进步,爬虫自动抓取和更新...