从0到1学搜索:搜索引擎的基本技术逻辑(一)

来源:互联网 发布:js关闭页面事件 编辑:程序博客网 时间:2024/06/06 11:44
最近在做搜索相关的项目。虽然谷歌和百度用了不知道多少年了,但此前可以说在搜索技术上是纯小白。于是最近恶补了一些相关知识。好久没有从零开始接触一个全新领域了,虽然有点焦头烂额,但过程中越来越感到乐趣。边学边随便写点笔记备忘,梳理搜索的技术逻辑。

(1)爬虫

从最基本的搜索行为开始。搜索需要满足的,是用户输入一个关键字,得到与之相关的信息。那么,首先要有一个信息池。如果没有任何信息,搜索引擎倒简单了,只要一行代码,always返回空就行了。。。

这个信息池可以是自己的,比如淘宝上面阿里提供的搜索商品功能。但如果想做一个像百度一样的全网搜索,就一定要包含别人的东西,因为没有一家公司可以囊括整个互联网,但用户能够选择的,理论上是整个互联网。正因为整个互联网内容太多,人工去寻找是不可能的,搜索成为刚需,于是造就了谷歌和百度富可敌国的巨大市值。所以,爬虫是第一步,爬到别人的网页资源,资源越多,搜索引擎越有竞争力。

爬虫是后台系统,即不直接和用户打交道,可以24小时不停地在服务器上跑。对于爬虫而言,当然有很多技术的挑战,比如如何充分地发掘到暗网资源,如何动态更新资源等。但可能更重要的是非技术因素,经典案例是淘宝屏蔽百度。互联网最要的是入口地位,把资源开放给搜索引擎,能够借助搜索推广的同时,也意味着将入口地位部分地交给了搜索引擎。

(2)索引

搜索的本质是关键词的匹配。这很容易让人想起一些匹配算法,譬如KMP。但不管如何高效的算法,在海量的备选网页或文档面前,都显得苍白无力。那怎么办?好在服务器有海量的计算资源,可以在后台不停地跑,这样就可以寄出杀手锏——预处理。即在用户发起搜索请求之前,先做一些事情,将一些关键词和文档的对应关系(即索引)建立起来,这样真正的搜索实时仅仅是在索引中匹配、查找、优化排序的耗时,与裸搜不可同日而语。

建索引是创建关键词和文档的对应关系,这就需要两步:第一,确定关键词集合;第二,创建并存储索引。第二步是经典的计算机问题,不再多说。说说第一步。因为无法实时搜索全部的文档资源,所以对应的某个关键字能否找到文档其实完全取决于前期的索引能否关联得上。像中文这样的语言不同于英文,英文可以直接用空格作为分词,中文则需要采用相应的算法来在茫茫汉字海洋中切分。而且还要考虑分词模型的更新,每时每刻都在产生着新词,比如一些网络词,一些新的人名或者公司名,用户的一些个性化输入,都会让分词模型很快过时。所以需要有一个能够不停自我学习更新的分词模型。这也是搜索引擎马太效应的一部分——越多人使用的搜索引擎,就越能够接受各种各样的搜索词,越能够更快地学习到各种新词,反哺分词模型。


从0到1学搜索:搜索引擎的基本技术逻辑(二)

0 0
原创粉丝点击