标点符(钱魏 Way)

搜索引擎的索引

索引,作为名词指搜索引擎存储网站信息的收录数据库;作为动词指搜索引擎将网站访问后获取有价值的信息,给以存储,以便提供给搜索者。

搜索引擎每时每刻都在处理这样的需求:用户搜索一个关键词,搜索引擎马上找到相关的网页给用户。要实现这样的需求,搜索引擎首先要尽可能多的把互联网上的网页搜集下来。这一部分工作由搜索引擎的机器人程序“爬虫”或“蜘蛛”顺着互联网上的链接一个个往下抓取。这样就有了一个巨大的记录着网页各种信息的资料库。现在这个资料库里差不多储存了100多亿个网页。资料库里记录了这些网页的URL,网页的HTML代码,网页标题等信息。

在用户键入关键词以后,搜索引擎怎样才能把相关网页找出来呢?从100亿网页里找出匹配的网页按普通的搜索方式,比如说像windows中自带的搜索那样一个找一个文件,即使用超级计算机,也不知道要消耗多少时间。但是搜索引擎却在不到一秒的时间内解决了这就需要为这些庞大的数据建立一张索引表。就像《现代汉语字典》一样,如果你要查找某个词语的意思,你不可能是通过一页一页的去查那个词在哪一页,你首先会去找这个词的第一个字在哪一页。你是会根据那个字的拼音或是偏旁部首先找到那个字在哪一页。在翻到那一页去查看那个词。搜索引擎也会为上百亿的网页建立一个索引库,用户查询信息的时候,是先到搜索引库里查一下要找的信息在哪些网页,然后就引导你去那些网页的。

chulibuzhou

用户对数据库最频繁的操作是进行数据查询。一般情况下,数据库在进行查询操作时需要对整个表进行数据搜索。当表中的数据很多时,搜索数据就需要很长的时间,这就造成了服务器的资源浪费。为了提高检索数据的能力,数据库引入了索引机制。从某种程度上,可以把数据库看作一本词典,把索引看作词典的索性表,通过索性表来查找想要得到的东西。一个表的存储是由两部分组成的,一部分用来存放表的数据页面,另一部分存放索引页面。索引就存放在索引页面上。通常,索引页面相对于数据页面来说小得多。当进行数据检索时,系统先搜索索引页面,从中找到所需数据的指针,再直接通过指针从数据页面中读取数据。

还有一个疑问就是数据库这么大,索引库里用什么样的分类方式? 比如说《现代汉语词典》字母列表或者偏旁部首的分类方式的。那搜索引擎的索引库里是怎么分类的?搜索引擎如果以字母列表的方式排列索引库,那么平均每个字母下要查询的网页数量是  100亿÷26=3.85亿 ,也还是一个很大的数字。最好的方法是100亿数据分两次查询,10万*10万=100亿。最符合这个10万的就是词语数了。汉语的词语数在10万左右,英语的单词数要比汉语多一点。用词语来分类还有一个好处,就是可以匹配用户查询的那个词语。本来用户就是要查这个词语的,那就按这个词语去分类就是。

所以,搜索引擎的索引库,最后就是这个样子的:

MP3_player

理论上,当用户输入关键词“mp3 player”搜索时,搜索引擎就从“mp3”那行和“player”那行拿出同时都有的交集url即可。在www.google.com的真实排名中,www.winamp.com 这个网站在搜索“mp3”的时候排第4位,在搜索“player”的时候也排第4位。当搜索“mp3 player”的时候,因为没有其他网站比它更匹配这个词语,所以排在了第一位。

前面介绍的是索引的原理,下面要说的是索引库的分类。大部分的搜索引擎有两个索引库(主索引和补充索引)。

  1. 补充索引并不是一种惩罚形式,触发了spam过滤器的页面会从索引中移除而不进入补充索引。
  2. 补充索引中的页面在用户查询时不太可能返回给用户,也不太可能在搜索结果中获得好排名。
  3. 如果页面在同一站点上存在内容极其相似的页面(重复内容页),很可能会进入补充索引中。
  4. 如果其他站点上存在和你的站点内容及其相似的页面,对方网站权重比你的网站高,你的页面很可能进入补充索引中。
  5. 大型站点上PageRank不足的页面很可能会进入补充索引。
  6. 抓取困难的页面(URL中使用太多参数或者页面过大)可能会就进入补充索引。
  7. 来自Google的说法,进入补充索引中的页面会进行不同的解析,采用的是一种叫做“压缩摘要”的形式,这意味着“不是每个页面上的词”都会被完全索引。

本文参考了国平的《分词与索引库》http://www.semyj.com/archives/544

码字很辛苦,转载请注明来自标点符《搜索引擎的索引》

评论