简单搜索引擎模型
A Simple Scratch of Search Engine
作者
史春奇,
搜索工程师,
中科院计算所毕业,
1, 需求迫切
2, 搜索引擎简单模型
3, 信息导航模型
4, 商家推广模型
5, 未来
本文是学习搜索引擎的涂鸦草稿, 高深读者请拐弯到:http://sewm.pku.edu.cn/IR-Guide.txt (北大搜索引擎小组--信息检索指南)
第一章 需求迫切
之前说过, 搜索引擎是互联网大爆炸后的新生事物, 他的成功来源于两个方面高度发展, 一个是泛信息化, 一个是泛商品化。
一)泛信息化
分为两个方面, 一方面是信息的类型呈百花齐放, 另一方面是信息的数量呈海量增长。
1, 信息种类繁多。
大家切身感受到的是多媒体娱乐和社交联系在互联网上变得明显的丰富起来。信息种类繁多不可避免会导致搜索引擎的种类繁多起来。 而搜索引擎种类繁多这一点,你可以看一下Google,Baidu提供的服务是多么繁多,你就知道了。参考百度更多(http://www.baidu.com/more/ ), Google更多(http://www.google.com.hk/intl/en/options/ ), 这些还不包括实验室(Lab)的产品。 我们换个角度看这个问题, 看看现在已经有多少种搜索引擎来满足信息繁多的各种需求了, Wiki的搜索引擎列表(http://en.wikipedia.org/wiki/List_of_search_engines )有一个分类,显示了10种类型,分别是,1)论坛, 2)博客, 3)多媒体(音乐,视频,电视),4)源代码,5)P2P资源,6)Email,7)地图,8)价格,9)问答信息,10)自然语言。 我们知道信息爆发都是由需求带动的,那么目前有多少需求已经有搜索引擎在满足了呢? 下面列出了14种类型, 分别是, 1)普通[知识], 2)地理信息,3)会计信息,4)商业信息,5)企业信息,6)手机和移动信息,7)工作信息,8)法律信息,9)医疗信息,10)新闻信息, 11)社交信息,12)不动产信息, 13)电视信息, 14)视频游戏信息。
2,信息海量增长。
类似, 我们从搜索引擎的发展,反向来看信息增长。搜索引擎的索引量是选择收录入库的网页数, 肯定小于或者远小于互联网的信息量。 最早Yahoo是人工编辑的目录索引, 就几万和几十万的级别。 到Infoseek,Google早期等的几百万的索引量。 到Baidu早期的千万、上亿的索引量。 到现在Google等上千亿的索引量。 如果你看一个网页要1秒钟, 1000亿网页要看3171年,而且不吃不喝, 一秒不停地看。如果你是愚公世家,你的祖辈在大禹治水的时候就开始看网页, 到现在你还没看完。
因此草根(Grassroots)用户需要搜索引擎来满足它们的信息的导航,草根用户追求免费,快捷和有效的服务。
二)泛商品化
也分为两个问题, 一方面, 满足新需求的商品种类繁多。 另一方面, 满足老需求的新商品的种类繁多。 现在有很多新产品,你如果不推广,很多有需求的人都找不到你, 或者找到的不是你。举例啊,如果你不看新闻广告,你都不知道有人在给狗狗举行隆重的葬礼,那么你知道去那里找个满意的祭司么? 有人告诉你说网上。 那么你知道哪家的服务好么? 又有人告诉你说找论坛看评论。 同样,你了解商家怎么推销自己的产品么?他们可以选择在网上打广告, 可以找搜索引擎帮助推广。现在产品的确太多了, 商家太多了, 让你都不知道何去何从。 就说最古老的饮食, 现在遍地是餐饮, 选哪个好了?如果某商家嫌客户少, 想打折推广。 古老的方式是挂大旗,发传单。 而今你要想让更多的人看到, 可以去互联网花钱推广, 可能花同样的钱, 被推广的对象还是有迫切需求的潜在用户。 这样你的广告费用花的会更有效果。 而搜求引擎广告,满足信息查询需求的同时,只要搜索的用户足够多,就会有很多提供服务的商家想请你帮忙做推广,满足他们脱颖而出的广告需求。
因此商家需要搜索引擎来满足它们的广告的推广,商家追求用户和利润是愿意付费的。
第二章 导航模型--草根需求信息
信息爆炸给搜索带来人气, 商品爆炸迫使商家追逐人气, 两者的结合使得搜索引擎成为互联网的宠儿。
第一节 最直观简单模型
在谈及基础前,还有些基础,插曲一下:
1. 什么是顺序文件(Sequential File),什么是随机文件(Random File),两者的优缺点?
2. 什么是索引(Index), 什么是哈希(Hash),两者有关联么?
3. 什么是计算机的金字塔存储系统(Storage Pyramid), 为啥是金字塔状?那寄存器(Register),高速缓存(Cache),内存储器(Internal Storage),外存储器(External Storage)等分别有什么优缺点?
在理想的场景下, 搜索引擎能够对互联网内容进行理解, 并且对用户的提问也能够理解, 然后直接给出用户需要的结果。但是目前计算机技术的发展, 搜索引擎还只能对互联网的页面进行索引(Index), 然后对用户提供的查询词进行分解成关键词(Keywords/Term)。 然后完成基于关键词的搜索(Retrieval)。
这样就搜索引擎就需要首先划分成“网页获取”, “建索引”, “查询”, 这三个大模块, 使得数据流从“互联网”保存到“网页库”, 然后到“索引库”,再到检索服务器, 最后流向用户, 见图(1.1)。
网页获取: 能够及时地, 全部地获取(复制)整个互联网的所有的网页。 我们知道互联网首先已经是海量的, 其次互联网还在动态变化, 每一秒都在变化(增更减)。 加入我们的存储足够大, 读取互联网数据的能力足够快。 那么每天将互联网全部复制一次,就可以满足要求。 显然这是不可能实现的。 那么怎么抓取才能尽可能完整地(entirely),及时地(timely)获得互联网数据呢?
建索引: 将全部网页, 按关键词索引。 由于文档的数量非常大, 并且文档的价值不一样。 要是能将所有新获取的页面, 在每天抓完之后, 当天就能索引完成(fast indexing), 并且索引的访问快速(efficient accessibility), 而且索引的存储空间(small storage space)较小。 并且索引的全部是有意义(valuable)的页面。 显然有点像又要马儿好, 又要马儿不吃草,是难以完美地实现的。 那么如何高效地进行索引成为这个阶段的核心问题。 高效地索引成为这个阶段的核心目标。
查询:对用户的查询词分解成索引能处理的关键词(Terms), 其次查找匹配的文档( resemblance ), 再将文档排序(ranking)后返回给用户。
图(1.1),最直观数据流模型
网页库:保存网页数据, 或保存成自定义结构化数据,或者文本块。 为了提高读写性能,一般会顺序保存。 为了增加空间利用率, 很可能进行压缩写入, 解压读出。 当然网页的相关属性也会保存到网页库, 为的是流水线处理, 尽量减少读写(IO)次数,从而减少处理时间和磁盘/闪盘的损耗。因为互联网的网页数量实在太大了。
索引库:索引库直观上从存储上来说可以是磁盘/闪盘上的一组索引文件。但是要真正完成索引机制—快速查询或者检索, 必然要对应到内存的数据管理。 因此会有对应的索引架构,对索引数据进行金字塔式地管理。一般是内存CACHE->内存高层索引结构->内存底层索引结构->磁盘/闪盘高层索引结构->磁盘/闪盘文件, 这样一个类似的金字塔结构(Pyramid Hierachy)。并且为了进一步提高效率,会采用多机并发,很可能是集群(Cluster)或者分布式(Distributed)的架构。 另外从索引机制上来看, 目前主要是倒排索引(Inverted Index)和顺序(Sequential)或者哈希(Hashing)正排索引的综合体。 倒排索引做到高效地检索, 正派索引可以在保证效率的前提下, 极大地减小倒排索引的索引内容的大小。 因此很是一个综合体架构。
检索服务器:直观上来看,检索服务器做到人机WEB服务接口。 因此可能采用MVC(Model-View-Controller)的模型来剥离WEB和数据(DATA)。 另外检索服务器又要做到查询比较, 涉及到相似性(Resemblance)和排序(Rank)的机制, 也就是说在WEB和DATA之后,必然还有一层进行检索(Retrieval)功能, 因此,检索架构很可能或者至少是一个Web-Data-Retrieval的三层架构。而为了分流用户群和增加安全性(不要把所有鸡蛋放到一个篮子里), 也会结合采用分流并行的架构。
有了数据流模型,不可避免要进行数据处理,数据处理是搜索引擎公司(Google, Baidu, Yahoo等)的核心竞争力, 会涉及到复杂的算法和架构。 另外,又是研究领域的热点和难点, 会有TREC,SIGIR,WWW等很多会议对各方面进行创新。 同时, 开源界也在发力。
首先,数据处理大体以用户可见与否,分成后端和前端两个部分。 将网页库和索引库相关联的部分, 称为后端。 而和互联网与查询词相关联的部分称为前端。后端和信息检索(Information Retrieval)领域更贴近。 前端和WEB技术(Web Technology)更贴近。自此,开始慢慢学习后端模型,这是看不见得的竞争力, 见图(1.2)。
完成“数据获取”的数据处理模型被称为爬虫Spider,从“互联网”获取数据,更新到本地“网页库”的核心程序被称为Spider或者Crawler。一方面,Spider和“互联网”之间要通过Schedule来进行数据获取。另外一方面, Spider又要将数据Update到“网页库”。
完成“建索引”的数据处理模型被称为索引器Indexer, 一方面, Indexer获取“网页库”的数据后, 要进行一次预处理或者清洗, 这也是所有IR领域的常见做法, 为了简化处理和优化效果。 另外一方面, Indexer又要Analyze数据,将结果保存到索引库。 索引库可以是结构化数据结构, 也可以用数据库(Data Base)来保存。
完成“查询”的数据处理模型被称为检索器Retrieval, 一方面, Retrieval要决定读取“索引库”的哪些索引数据。 另一方面, Retrieval要根据Query的相关性(Resemblance)来进行排序(Rank)。 因此这是一个决策机制。 打个简单比喻, 如果前面所有的处理是身体的话, 那么这就是大脑。说句土话,有健康的身体才能为大脑供血, 有牛掰的大脑才能理解用户的需求。
图(1.2),最直观数据处理模型
作者
史春奇,
搜索工程师,
中科院计算所毕业,
第二节 互联网简单模型
管中窥豹, 略见一斑。 由于信息获取的便捷性,和大家的切身体会, 选择中国互联网来讲述简单见解。 这里纯属草根见识, 有专业需求的, 可以参考《 Modeling the Internet and the Web . Probabilistic Methods and Algorithm》是形式化描述互联网模型的极好的一本书。豆瓣介绍: http://book.douban.com/subject/1756106/
幻灯片: http://ibook.ics.uci.edu/slides.html
PDF下载:
互联网(Internet)最重要的是互联, 对应的是内联网Intranet或者说局域网LAN。 还记得我当时做双绞线RJ-45的水晶头, 然后把几个机器链接起来, 能够相互之间拷贝电影, 打红警,就很开心。 当时还买书看什么是对等网,星型网络结构。 后面再学ISO七层模型和TCP/IP四层模型等等才知道互联是如何而来的。 自我感觉互联网(Internet)中的互联和搜索引擎的所利用的网页互联,还是不太一样。互联网(Internet)和局域网(Intranet)和LAN的互联, 强调的是物理层上的互联, 是TCP/IP协议的描述。 而搜索引擎所利用的互联, 某种意义上是强调的万维网(World Wide Web)的互联, 是HTTP协议中的超链(hyperlinks)互联。 或许也是计算机领域Net和Web的区别来着。 万维网(WWW)是网站(Website)的互联。如果将一个网页看成承载信息的一个单元, 那么网站可以看成承载一类信息的单元。 而WWW是不同类信息的互联, 是信息的海洋。 我体会较早的上网是1999年开始的Chinaren校友录和263电子邮箱。可以从同学谈话的页面点击跳到同学照片的页面。 正是这种简单的点击跳转,互联了WWW,所以你看到大部分站点的域名是WWW开头的, 表明那是一个Web服务器。 每个网站都有一个首页, 表示这是入口, 从这个入口,应该可以访问整个网站。 随着互联网的发展,网站之间的点击跳转成为必然,起初可能是你自己收藏链接, 慢慢一些门户网站成为大家访问互联网的入口, 从这里你应该可以访问整个万维网, 到如今搜索引擎在这方面起的作用越来越大。 其实搜索引擎也是在利用网站之间的这种点击跳转的互联信息,只不过大大减少了你查看点击跳转后是页面否为目标页面的尝试和时间代价。
1.发展历史
《中国互联网发展大事记