没有合适的资源?快使用搜索试试~ 我知道了~
关于搜索引擎及其开发 关于搜索引擎及其开发 关于搜索引擎及其开发
资源详情
资源评论
资源推荐
关于搜索引擎及其开发
托 google、百度们成功的福,搜索引擎火了半边天。很多人都想跨到这个行业里边来。前两
天在公司里边面试了一些人,基本上没有感到满意。不是说从业经验不够,有些也已经工作
了三年、四年。不过我估计,或者说是猜想,是不是做应用做的时间太长了,把数据结构、
算法,时间、效率都扔到一边去了;然后平时的工作又太忙,平时自己工作的做的可以,但
对工作相关的、稍微扩展的知识没有时间或者说是懒得去看了。。。。。
我的想法是,如果有兄弟姐妹要进入这个行业,最好对这个行业流行的想法、做法
了解一些,如果不了解这些,就把数据结构和算法的基础课好好看看,或者说好好练练编程
的基本功。搜索引擎开发涉及到了我们上学时学到的所有的东西。而且有些特别新的东西是
没有书可以看得,有的只是经验,经过传承到了后进入者的手里;好的话,就是有论文,不
过有价值的都是英文论文,国内的都是抄来抄去,不如直接去看他的原文(比如,也不知道
哪个神仙把 robust 翻译成鲁棒性,放着健壮性之类的已经有的好词不用,非得翻译成这么一
个上下不着地的词,而且现在还有逐渐流行的趋势。。。。)。不过,有本书叫做<<现代信息检
索>>(MODERN INFORMATION RETRIEVAL),写的挺好。
呵呵。其实我在搜索引擎领域做的时间也不是多长,从进中搜到现在有两年多一点。我把我
的所学到的一点经验和平时的思考的东西写出来,与大家共同的切磋。写到哪里算是哪里,
您就将就去看。
首先声明:我不是牛人,离我所认为的牛人还差不少,大家一块讨论,口下留人,大家拍砖
头肯定可以把我拍死^ _ ^。
按照目的的不同,搜索引擎分了两种:通用搜索(业内称为大搜索)和垂直搜索。网页搜索是
大搜索,新闻搜索、论坛搜索是垂直搜索,酷讯的生活搜索之类的都是垂直搜索。
有人问我,现在 google,baidu 都在做搜索,而且做的很成功,他的胳膊伸长一点,哪还有其
他的小厂商生存的余地?其实不光是搜索这个行业,其他的行业也存在、我们也可以提出相
同的问题。但是,每年都有新的公司冒起来—即便是它所做的领域已经有了成功的公司,但
是走在前边的成功公司并没有挡住后边新兴公司的路。我认为,市场的容纳能力和瞄准的市
场不一样决定了这个。单纯以搜索领域来讲,google 国外做的很成功并且不断扩张的的时候,
中国的市场做的不是很好,百度抓住这个时间差让“百度更懂中文“成功占据了大部分的份
额;当大搜索起来的时候,众多的垂直搜索已经开始兴起,特别是本地搜索部分,这是有每
个人的日常生活密切相关的部分,是一个很大的市场。搜索领域的领头羊会把全部的精力都
放在垂直搜索方面吗?我看不会。他们的任务是把自己在搜索领域的优势继续保持下去,君
不见后来者居多,竞争非常激烈,特别是大搜索,搜狐的搜狗,QQ 的,网易的有道。如果
他们保持不了这个在行业内的领先地位,他们离着关门不远了。这是他们的已得市场,已得
利益。这当然不是说他们不会扩张,他们会买很多的公司补充自己的不足,像 google 为了
和百度的贴吧和百度知道竞争,投资迅雷,和天涯合作,花钱买来流量;百度忍受不了自己
的用户在看着自己的贴吧的时候却在用 QQ 和 msn 交流,据说要做自己的即时通了。呵呵。
而且,现在各个巨头也在开始做本地搜索,手机搜索。。。。不管行业如何,留给各个后来者
的机会还有很多,市场很大,永远都有新想法诞生的可能。前提只有一个:不要跟巨头面对
面的竞争,跟他们在他们的优势领域竞争不是找死吗?我们的老祖宗早就有以己之长,攻彼
之短,只要你能跑在大船的前面,被收购也算是一个不错的选择,况且还有很多成为巨头的
机会!巨头的优势在于资金和技术积累;劣势在于,庞大了以后掉头不易,要做的太多,还
要小心翼翼的保持第一不被超越。而且,行业的繁荣才能有巨头的繁荣。珠穆朗玛峰只能出
现在青藏高原上。
一般说,搜索引擎包括这几部分:下载(爬虫)子系统,数据预处理子系统,搜索服务,控
制(及监控)部分。搜索引擎是一个比较新的行业,国内也掌握了核心的技术。所以,和做
OA,做工作流,做核心层上的应用有些不同,系统无论是从规模还是性能上讲都有比较高
的要求。咱们一个一个的说。
下载。互联网通过超链,每一个网页是一个点,然后点和点之间有关联,关联的注释就是链
接文本,所有的链接组成了一个巨大的网。大搜索下载的任务就是把这些网的每一个点都保
存到本地(当然这是说理论上,现在互联网的规模,恐怕 google 也无法把所有的东西都保
存到本地)。这带来几个问题:1. 网页如何尽量不重复的下载。网络带宽资源是有限的,本
地硬盘资源也是有限的,下载的时间也是有限制的,重复的下载系统受不了。2. 互联网是
不断更新的,这种更新需要反映到本地硬盘上的数据。如何尽量及时的更新?
一个 Url 就是一个字符串,而且这个字符串比较长。给保存和比较都带来了麻烦。我们对
Url 做 md5 映射,把它映射成一个 64 位的整形值。现在大多用的是 64 位。Md5 本来算出来
时 128 位,一般是取前 64 位。Md5 的重复率很低。我曾经做过 70 亿 Url 的实验,我尽量模
拟 Url 的组成生成了 70 亿 Url,然后取 md5 值,排重,没有发现一个重的;而且 md5 的散
列非常好,他本身可以认为是一个哈希散列,但是分布的非常随机。我把 70 亿的结果值分
散到多个文件里边,每个文件里边的 ID 的个数基本上是一样的。我们可以认为,每一个 Url
取了 md5 值以后,他的这个 ID 值是唯一的。它可以用来比较两个字符串是否相同。也称作
信息指纹。是判断是否相同的重要的办法。
对 ID 值取模(mod)是一个非常重要的思想。依赖于 md5 值的散列性,你可以把大量的数
据分成小堆,存到文件,各个小堆的数据是控制到可以放到内存中处理。这是查找、排重、
以及后边建索引的基本的方法。它使得我们可以把大任务分解成可以并发解决。这样的并发
系统是一个明显的木桶理论模型:决定于处理速度最慢的一个。但是,md5 的散列性非常好,
各个处理部分处理的数据在规模上相差不大,或者说基本上是一样的。比如上边所说的例子,
70 亿 ID 值。70 亿*8=56G,放到内存里边不太现实。可以把他们对 200 取模,放到文件,
每个文件 280M,然后对每一个文件进行处理。那就随你的便了。
下载分成 Server 端和 Client 端。Server 端指定下载的种子,他把这些 url 发给 Client 端,client
端把 server 端给的 url 下载下来以后,分析页面把分析出来的 url 发给 server 端。。。。如此循
环。有了上边的介绍,判断是否下载就好说了。都是 64 位值得比较。最简单的办法,你可
以利用平衡二叉树,这是一个非常方便的动态查找的办法。不过,数据量一大,64 位值也
会占用很多的内存。我们可以算一下。1 亿*8 约等于 800M,而且树节点左右指针也要占 8
个字节,平衡二叉树还有一个标记变量,这样算下来,放完 1 亿大约需要 1.8G。不过他的
查询速度可以忍受,而且是绝对的不重复,没有误差。假设我们可以探测到的 Url 是 100 亿
网页,按照这种办法,一台机器按照放 2 亿计算,需要 100/2=50 台 server 端。这样的确是
要不少的机器,当然还有其他的办法。需要仔细的去想。呵呵。
垂直搜索的下载和大搜索的下载是不一样的。垂直搜索针对一些特定的网站。以新闻为例:
新闻下载会针对新闻源,比如新浪,china.com 等新闻发布网站定时、定向抓取;寻找他们
的新闻发布的规律,把那些网页下载下来。这就没有上边所说的大图的遍历和更新机制的问
题了。难度不可同日而语。
不过,不要看了这些就认为下载很简单,这是一个与经验关系非常密切的活。上边说的都好
说,但是,下载过程中碰到的问题可就多了。你需要解决大量的意想不到的事情,我在这里
也不能多说,不过可以举几个例子:如果你把一个网站访问的太过频繁,重则把这个网站给
弄瘫痪了(特别是小网站,大网站的抗打击能力还可以),轻则。。。让管理员注意到了太多
的访问就把你的 IP 给封了。下载需要礼貌。毕竟是访问别人的网站。这是到别人家里做客
啊!可不比自己家!还有作弊网页,大量的 SEO 作弊网页,下载的时候需要去掉一部分;
还有,不是所有的网站都是可以在任何时候访问的,新浪首页下载不下来的时候你怎么办?
得多想想后边如何处理。
下载完了的数据需要进行处理。抽取标题,正文,父链接,字连接,链接文本。这是后边的
数据基础。所有这些以及后边的其他的部分,难度大多集中于数据量。
正文解析。把一个
html 中的正文解析出来,不是很轻松。这个一般有两种方法:1. 基于模板。
这个用在新闻正文的解析上比较多。一个网站的新闻在一个时间段内往往有基本固定的格
剩余12页未读,继续阅读
zhouguoyao
- 粉丝: 5
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0