总体而言,搜索引擎面临以下挑战。
1、页面爬行需要快速且全面
互联网是一个动态的内容网络。每天,无数的页面被更新和创建,无数的用户发布内容并相互交流,要返回到最有用的内容,搜索引擎需要抓取新的页面,但是由于页面数量巨大,搜索引擎蜘蛛需要很长时间才能更新数据库中的页面一次。当搜索引擎诞生时,捕获和更新周期通常以月为单位进行计算,这就是为什么谷歌在2003年之前每个月都有一个大的更新。
现在主流的搜索引擎已经能够在几天内更新重要的页面,并且在几小时甚至几分钟内将包括在高权重网站上的新文档。然而,这种快速的包含和更新只能局限于高权重的网站,许多页面在几个月内没有被重新爬行和更新也是很常见的。
为了返回比较好的结果,搜索引擎还必须尽可能全面地抓取一个页面,这需要解决许多技术问题,有些网站不利于搜索引擎蜘蛛爬行和爬行,如网站链接结构的缺陷、Flash、Java脚本的广泛使用,或者用户在访问该部分之前必须登录的内容,都增加了搜索引擎爬行内容的难度。
2、海量数据存储
一些大型网站在一个网站上有数百万、数千万、甚至数亿的页面,你可以想象网络上所有网站的页面加起来有多少数据,搜索引擎蜘蛛抓取页面后,还必须有效地存储这些数据,数据结构必须合理,具有很高的可扩展性,对写入和访问速度的要求也很高。
除了页面数据,搜索引擎还需要存储页面之间的链接和大量的历史数据,这是用户无法想象的。据估计,百度拥有340多万台服务器,谷歌拥有数十个数据中心和数百万台服务器,这种大规模的数据存储和访问不可避免地会面临许多技术挑战。
我们经常在搜索结果中看到排名上下波动,没有明显的原因,我们甚至可以刷新页面并查看不同的排名,有时,网站数据也会丢失,这可能与大规模数据存储和同步的技术难点有关。
3、索引处理快速、有效且可扩展
在搜索引擎对页面数据进行爬行和存储后,还需要进行索引处理,包括链接关系计算、正向索引、反向索引等。由于数据库中的页面数量庞大,执行pr等迭代计算既费时又费力,为了提供相关及时的搜索结果,只需抓取是没有用的,同时也需要做很多的索引计算,因为在任何时候都会添加新的数据和页面,所以索引处理也应该具有良好的可伸缩性。
4、快速准确的查询处理是普通用户唯一能看到的搜索引擎步骤
当用户在搜索框中输入一个查询并单击“搜索”按钮时,他通常会在不到一秒钟的时间内看到搜索结果。最简单的表面处理实际上涉及非常复杂的背景处理。在最后的查询阶段,比较重要的问题是如何在不到一秒钟的时间内从数十万、数百万甚至数千万个包含搜索词的页面中快速找到比较合理、相关的页面,并根据相关度和权限进行排列。
5、判断用户意图和人工智能
应该说,搜索引擎的前四个挑战已经能够更好地解决,但是对用户意图的判断还处于初级阶段。不同的用户搜索相同的查询词,可能会查找不同的内容。例如,在搜索“苹果”时,用户是想知道苹果的果实,还是苹果电脑,还是想知道电影“苹果”的信息?或者他想听“苹果”?没有上下文,没有对用户的个人搜索习惯的理解,他就无法判断。
搜索引擎目前正在根据用户的搜索习惯、历史数据的积累和语义搜索技术来判断搜索意图、理解文档的真实含义和返回更相关的结果。