如果你是个门外汉,对IT知识知之甚少,那就记着这句话:搜索结果速度这么快是因为你搜索的词之前大部分都搜索过了,你看到的不过是缓存而已。就好比说,你走的路都是别人已经修好的高速公路,当然跑起来比较顺畅了。
如果你想进一步了解搜索技术的原理,看官您可以继续阅读了
搜索的整个过程是从前端到后端,依次是cache(缓存),哈希,倒排索引。
Cache(缓存):每个模块,每个切分粒度,每个算法都会有自己的Cache,例如整个查询语句可能没有cache,但切词以后的基本词肯定有人查过,就可以直接读取cache。
对于没有Cache的情况:除了靠并行查询和高效的倒排索引集合求交算法,还有很复杂的查询策略优化,比如尽可能先查询高优先级的网页库。如果极端情况下,完全没有cache,可能耗时1秒左右也是有可能的。
哈希(Hash):将网页库按哈希拆分成多个子库,并行查询。
那到底什么是哈希呢?
比如这里有一万首歌,给你一首新的歌《青春修炼手册》,要求你确认这首歌是否在那一万首歌之内。
无疑,将一万首歌一个一个比对非常慢。但如果存在一种方式,能将一万首歌的每首数据浓缩到一个数字(称为哈希码)中,于是得到一万个数字,那么用同样的算法计算新的歌《青春修炼手册》的编码,看看歌《青春修炼手册》的编码是否在之前那一万个数字中,就能知道歌《青春修炼手册》是否在那一万首歌中。
当然这个简单的哈希算法很容易出现两者同样大小的歌曲,这就是发送了碰撞。而好的哈希算法发生碰撞的几率非常小。
倒排索引:以词为索引,包含该词的所有url为值的索引表,如下图。一个Query切词以后会命中下图中的若干行,然后对这些行做集合求交,交集中的Docs就是查询结果集合。