`
talentluke
  • 浏览: 591930 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Google式的搜索引擎实现

阅读更多

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>

 

 

参考 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

分享到:
评论

相关推荐

    去哪儿搜索引擎QSearch设计与实现

    搜索引擎是指根据一定的策略、运用特定的计算机程序从互联网上搜集信息...搜索引擎包括全文索引、目录索引、元搜索引擎、垂直搜索引擎、集合式搜索引擎、门户搜索引擎与免费链接列表等。百度和谷歌等是搜索引擎的代表。

    心兰搜索插件 JQuery搜索 搜索引擎 JQuery搜索引擎

    包含主流搜索引擎: 百度、谷歌、必应、搜狗、搜搜、淘宝; * 3.页面中已包含图片文件,仅一个js文件就实现图文并茂; * 4.整合百度搜索提示功能及搜索记录功能,自动记录10个搜索历史到浏览方电脑; * 5.使用国际化...

    古力乐简易网址导航综合搜索引擎站html源码 就一个页面

    本程序适用于任何环境,无需数据库,上传即可使用,集合了谷歌、百度、必应、搜狗、Yandex等国内外主流搜索引擎,访客可一站式实现不同搜索引擎的搜索结果,除了综合搜索外,在搜索框下面还另有购物消费、常用工具、...

    SOPI垂直搜索引擎系统 V2.2

    SOPI垂直搜索引擎2.0是一个从信息采集到分析到索引的整套解决方案,让你也可以轻松拥有一个多功能垂直搜索引擎。可以针用于行业垂直信息进行搜索,网站搜索等各类应用。 SOPI垂直搜索引擎系统的应用特点 外网搜索...

    搜索引擎优化高级编程(PHP版)

    Jaimie Sirovich是一位搜索引擎营销顾问,致力于与客户一起构建强大的在线展示平 台。虽然Jaimie身为一个计算机程序员,但是他更乐于参与营销方面的工作。他毕业于 Stevens Institute ofTechnology,获得计算机科学...

    古力乐简易网址导航综合搜索引擎站、.zip

    本程序适用于任何环境,无需数据库,上传即可使用,集合了谷歌、百度、必应、搜狗、Yandex等国内外主流搜索引擎,访客可一站式实现不同搜索引擎的搜索结果,除了综合搜索外,在搜索框下面还另有购物消费、常用工具、...

    基于Python的抽取式文本自动摘要的实现.zip

    pagerank算法应用于谷歌等搜索引擎中,通过网页链接的数量和质量来初略估计网页的重要性,从而对网页进行排名。textrank是基于pagerank算法的一种改进,它利用一篇文章内部词语共同出现的语义信息即可对一篇文章进行...

    DataStructureProject:通过使用具有二项式堆构造的优先级队列来观察简单的搜索引擎来应用数据结构

    最著名的搜索引擎是Google,Bing,Yahoo ...这些搜索引擎背后运行着各种机器学习和深度学习算法。 另一方面,它们背后的共同逻辑是根据相关性对文档进行排名。 在该项目中,二项式堆用于实现对文档进行排名的...

    whoogle-search:一个自托管,无广告,尊重隐私的元搜索引擎

    快速简便地实现为台式机和移动设备上的主要搜索引擎替代品。 内容产品特点没有广告或赞助内容没有JavaScript 没有饼干没有跟踪/链接您的个人IP地址* 没有AMP链接没有网址跟踪标记(即utm =%s) 没有引荐来源标头...

    中国站长报改版 第一期

    # Google adsense 广告功略及〖google 广告三定理〗 # 中国的SEO(搜索引擎优化) # 什么是互动式搜索? # 42个搜索引擎免费登陆入口大全 # 网站赚钱联盟大全 # 各大联盟最新公告 ...

    Google Chrome 6.0.451.0 Dev 版(一个由Google公司开发的网页浏览器)

    Google Chrome,中文名为“谷歌浏览器”,是一个由Google公司开发的网页浏览器。与苹果公司的safari相抗衡,浏览速度在众多浏览器中走在前列,属于高端浏览器。采用BSD许可证授权并开放源代码,开源计划名为Chromium...

    NITC效益型网站管理系统.NET v3.2 多国语言版.rar

    经众多网络营销专家制定,系统自带搜索引擎基础优化功能,能在最短的时间内提升网站的曝光率,品牌建设更轻松,网络营销更专业 3、企业办公应用: 提供相关的询盘/订单管理、业务管理、客户管理等企业常用办公基础...

    Google_2:这是使用tirlwind CSS,Next.js,React,Node firebase和google api构建的goole搜索引擎代理类型。 还实现页面分页

    这是一个用引导的项目。... 交互式Next.js教程。 您可以查看-欢迎您提供反馈和意见! 在Vercel上部署 部署Next.js应用程序的最简单方法是使用Next.js创建者提供的。 请查看我们的以获取更多详细信息。

    蜗牛精灵免费seo工具 v5.2.0.4.zip

    蜗牛精灵seo工具是一款专业的权重优化软件,软件采用全新的智能云优化技术,能迅速在百度、谷歌、搜狗、搜搜、雅虎、有道、必应这些搜索引擎中,依次进行目标网站的搜索,大幅度提高搜索引擎对网站的注重程度和关注...

    SEO编程PHP中文版

    第1章 你是编程人员,也是搜索引擎营销人员 1.1 你是谁 1.2 你需要学习什么 1.2.1 SEO和站点体系结构 1.2.2 SEO不能成为马后炮 1.2.3 通信构建抉择 1.2.4 构建细节将会决定成败 1.3 准备软件环境 1.3.1 安装...

    Google Android SDK开发范例大全(PDF高清完整版1)(4-1)

    4.11 快速的搜索手机文件引擎——JavaI/O的应用 4.12 按钮也能随点击变换——ImageButton选择特效 4.13 具自动提示功能的菜单——AutoCompleteTextView与数组 4.14 数字及模拟小时钟设计——AnalogClock与...

    Hadoop.chm HadoopAPI Hadoop英文版最新API

    Hadoop是Apache Lucene的创始人 Doung Cutting ... Hadoop是Apache软件基金会所研发的开放源码并行运算编程工具和分散式档案系统,根据Google公司发表的MapReduce和Google档案系统的论文,自行实作而成。这里有chm api

    低清版 大型门户网站是这样炼成的.pdf

    第13章 门户网站的搜索引擎优化—seo技术 781 13.1 为什么要进行搜索引擎优化 781 13.1.1 搜索引擎概述 781 13.1.2 网络营销催生seo 784 13.1.3 seo让你的网站脱颖而出 785 13.2 搜索引擎到底喜欢什么样的网站 ...

    思达电子邮箱地址搜索软件Email Spider 9.1

    20、除直接支持google,yahoo,baidu,bing,sogou等搜引擎外你还可以使用其它搜索引擎,也可以使用这些搜索的高级搜索功能,实现更准确的搜索; 21、能提取各种型式的邮箱,包括设置了防提取功能的网页,如用图片代替...

    Android入门到精通源代码.

    12.3 应用实例详解:过滤式搜索 引擎程序 12.3.1 实例分析 12.3.2 实例实现 12.4 Android的GTalk应用开发 12.4.1 GTalk在手机中的应用 12.4.2 Android GTalk API简介 12.4.3 为GTalk配置Android模拟器 12.5 应用实例...

Global site tag (gtag.js) - Google Analytics