写这篇文章的目的是因为最近看了一些算法书籍,对搜索引擎核心算法有了个大致的了解,就当做个笔记吧。
搜索引擎的核心思想就是索引,类似书籍的目录,索引技术其实最早起源于古巴比伦图书馆,这个伟大的发明不是现在计算机科学的产物,如果没有索引,想象一下在一本书中查找想要的内容,就需要一页一页的查询,运气好的很快能找到,运气不好在最后一页出现的话,前面所有的时间都白白浪费了,索引就很好的解决了这个问题,因为索引信息量少,很精简,基本上几页就能描述整本书的大体内容结构。举个例子,我们在词典上查询一个词“乘风破浪“,那我们肯定会翻到字母c开头的目录页查找这个词所在的页码,然后翻到对应页面查看具体这个词是什么意思。搜索也是一样的,我们在搜索引擎搜索“乘风破浪”,搜索引擎会有一个索引数据库,这个数据库中存放了“乘风破浪”---第5页,然后展示出来,当然还有一些第五页这个网页的一些描述信息。
除了简单的索引,还有一个问题急需解决,那就是我搜索多词的时候,搜索引擎怎么处理,比如我搜“屋子 草莓”,我们知道“屋子“、“草莓“在第一页、第二页都出现,但是两个词出现的位置相邻距离不同,那“屋子 草莓”搜出来的页面怎么排序?很显然,两个词距离相近应该排在前面,所以在索引信息中只记录一个词出现的页数是不够的,还需要记录这个词出现的位置,比如屋子----1-2 2-10 代表第一页的第二个位置,第二页的第十个位置,草莓----1-3 2-16代表第一页的第三个位置,第二页的第十六个位置。很明显第一页两个词相邻近就应该排在前面。
网页中除了正文,其实还有用户在浏览器上看不到的标签数据,如<title> </title> <body></body> 搜索引擎一般也将标签数据记录在索引中,如<title> 2-10 </title> 2-50 记录后搜索引擎就能满足一些特殊搜索,如用户搜索在网页title标签中的关键字 由于关键字在索引中也有记录位置 所以在title标签中的位置就变成了简单的数学比较运算。
搜索引擎的核心排名机制是什么样的?这要追溯到谷歌创始人发表的pageRank论文中的排名算法。一开始搜索引擎根据超链接来决定一个网页的权重,比如a->b ,c->b 那a的权重是1,c的权重是1,b的权重是1+1=2,所以哪个网页的超链接多,哪个网页的权重值就大,但是这会造成一个严重的问题,比如 a->b ,c->b,b->a 这种循环链接的方式就会让网页的权重一直增加,于是pageRank论文中就提出了一种随机访问思想,模拟用户访问网页形式,从一个网页随机访问超链接,跳入下一个网页,再随机访问超链接,这样执行几万百万次,得出访问过程中网页被访问的概率就是这个网页的权重,这种方式可以很好和超链接方式获取的权重相结合。
现代搜索引擎除了上述这些核心算法外,还做了很多很多事情,其复杂程度非常高,比如搜索引擎需要解决人为故意增加一些垃圾超链接来提升权重,还有一些关键字与网页相关度优化等。