搜索引擎是指根据一定的策略、运用特定的计算机程序从互联网上搜集信息,在对信息进行组织和处理后,为用户提供检索服务,将用户检索相关的信息展示给用户的系统。
搜索引擎的门槛主要是技术门槛,包括网页数据的快速采集、海量数据的索引和存储、搜索结果的相关性排序、搜索效率的毫秒级要求、分布式处理和负载均衡、自然语言的理解技术等等
搜索引擎的实现原理,可以看作四步:从互联网上抓取网页→建立索引数据库→在索引数据库中搜索→对搜索结果进行处理和排序。
(1)爬行:
搜索引擎是通过一种特定规律的软件跟踪网页的链接,从一个链接爬到另外一个链接,像蜘蛛在蜘蛛网上爬行一样,所以被称为“蜘蛛”也被称为“机器人”。搜索引擎蜘蛛的爬行是被输入了一定的规则的,它需要遵从一些命令或文件的内容。
网络蜘蛛是通过网页的链接地址来寻找网页,从网站某一个页面(通常是首页)开始,读取网页的内容,找到在网页中的其它链接地址,然后通过这些链接地址寻找下一个网页,这样一直循环下去,直到把这个网站所有的网页都抓取完为止。在抓取网页的时候,网络蜘蛛一般有两种策略:广度优先和深度优先。广度优先是指网络蜘蛛会先抓取起始网页中链接的所有网页,然后再选择其中的一个链接网页,继续抓取在此网页中链接的所有网页。这是最常用的方式,因为这个方法可以让网络蜘蛛并行处理,提高其抓取速度。深度优先是指网络蜘蛛会从起始页开始,一个链接一个链接跟踪下去,处理完这条线路之后再转入下一个起始页,继续跟踪链接。这个方法有个优点是网络蜘蛛在设计的时候比较容易。
由于不可能抓取所有的网页,有些网络蜘蛛对一些不太重要的网站,设置了访问的层数。
(2)抓取存储:
搜索引擎是通过蜘蛛跟踪链接爬行到网页,并将爬行的数据存入原始页面数据库。其中的页面数据与用户浏览器得到的HTML是完全一样的。搜索引擎蜘蛛在抓取页面时,也做一定的重复内容检测,一旦遇到权重很低的网站上有大量抄袭、采集或者复制的内容,很可能就不再爬行。
(3)预处理:
搜索引擎将蜘蛛抓取回来的页面,进行各种步骤的预处理。
1)提取文字
2)中文分词(现有的分词算法可分为三大类:基于字符串匹配的分词方法、基于理解的分词方法和基于统计的分词方法。)
3)去停止词
4)消除噪音(搜索引擎需要识别并消除这些噪声,比如版权声明文字、导航条、广告等……)
5)正向索引
6)倒排索引
7)链接关系计算
8)特殊文件处理
当用户在搜索框进行搜索时,搜索引擎并没有在网络上实时的搜索用户的请求,而是在检索索引数据库,搜索引擎定期更新其索引库。
首先搜索引擎查看搜索索引中的每一个搜索关键词,可以得到包含这些关键词的所有网页列表,这会得到非常庞大的数据。
每一种搜索引擎都有自己的算法,基于它对用户需求的猜测来排序网页。搜索引擎的排序算法可能会检查,是否你的搜索词包含在页面的标题中,它可能会用同义词匹配与你的搜索关键词语义相近的查询结果。生成初步的查询结果,对查询结果集按权威性和PageRank进行排序,重复的查询结果被剔除。
对查询结果进行过滤处理。最终返回给浏览器端的用户一个人性化的、布局良好的、查询结果和广告泾渭分明的有机查询结果页面。
使用机器学习更好的理解词语,它让算法不仅仅是搜索页面上的单个字母或单词,而是理解词语的潜在意义。
如果能知道用户查找的关键词(query(查询)切词后)都出现在哪些页面中,那么用户检索的处理过程即可以想象为包含了query(查询)中切词后不同部分的页面集合求交的过程,而检索即变成了页面名称之间的比较、求交。这样,在毫秒内以亿为单位的检索成为了可能。这就是通常所说的倒排索引及求交检索的过程。
页面分析的过程实际上是将原始页面的不同部分进行识别并标记,例如:title、keywords、content、link、anchor、评论、其他非重要区域等等,分词的过程实际上包括了切词分词同义词转换同义词替换等等,以对某页面title分词为例,得到的将是这样的数据:term文本、termid(标识)、词类、词性等等,之前的准备工作完成后,接下来即是建立倒排索引,形成{termàdoc}(文档集合),
索引系统在建立倒排索引的最后还需要有一个入库写库的过程,而为了提高效率这个过程还需要将全部term以及偏移量保存在文件头部,并且对数据进行压缩.
(1) Query串切词分词即将用户的查询词进行分词,对之后的查询做准备,以“10号线地铁故障”为例,可能的分词如下:
10 0x123abc
号 0x13445d
线 0x234d
地铁 0x145cf
故障 0x354df
(2)查出含每个term的文档集合,即找出待选集合,如下:
10 1 2 3 4 7 9……
号 2 5 8 9 10 11……
(3)求交,上述求交,文档2和文档9可能是我们需要找的,整个求交过程实际上关系着整个系统的性能,这里面包含了使用缓存等等手段进行性能优化;
(4)各种过滤,举例可能包含过滤掉死链、重复数据、色情、垃圾结果;
(5)最终排序,将最能满足用户需求的结果排序在最前,可能包括的有用信息如:网站的整体评价、网页质量、内容质量、资源质量、匹配程度、分散度、时效性等等。用户在搜索框输入关键词后,排名程序调用索引库数据,计算排名显示给用户,排名过程与用户直接互动的
倒排索引一般表示为一个关键词,然后是它的频度(出现的次数),位置(出现在哪一篇文章或网页中,及有关的日期,作者等信息),它相当于为互联网上几千亿页网页做了一个索引,好比一本书的目录、标签一般。
图片搜索:
1.缩小尺寸。将图片缩小到8x8的尺寸,总共64个像素。这一步的作用是去除图片的细节,只保留结构、明暗等基本信息,摒弃不同尺寸、比例带来的图片差异。
2.简化色彩。将缩小后的图片,转为64级灰度。也就是说,所有像素点总共只有64种颜色。
3.计算平均值。计算所有64个像素的灰度平均值。
4.比较像素的灰度。将每个像素的灰度,与平均值进行比较。大于或等于平均值,记为1;小于平均值,记为0。
5.计算哈希值。将上一步的比较结果,组合在一起,就构成了一个64位的整数,这就是这张图片的指纹。组合的次序并不重要,只要保证所有图片都采用同样次序就行了。