与或搜索算法
1. 基本算法——深度优先搜索(DFS)和广度优先搜索(BFS)
深度优先搜索和广度优先搜索,都是图形搜索算法,它两相似,又却不同,在应用上也被用到不同的地方。这里拿一起讨论,方便比较。
一、深度优先搜索
深度优先搜索属于图算法的一种,是一个针对图和树的遍历算法,英文缩写为DFS即Depth First Search。深度优先搜索是图论中的经典算法,利用深度优先搜索算法可以产生目标图的相应拓扑排序表,利用拓扑排序表可以方便的解决很多相关的图论问题,如最大路径问题等等。一般用堆数据结构来辅助实现DFS算法。其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次。
基本步奏
(1)对于下面的树而言,DFS方法首先从根节点1开始,其搜索节点顺序是1,2,3,4,5,6,7,8(假定左分枝和右分枝中优先选择左分枝)。
(2)从stack中访问栈顶的点;
(3)找出与此点邻接的且尚未遍历的点,进行标记,然后放入stack中,依次进行;
(4)如果此点没有尚未遍历的邻接点,则将此点从stack中弹出,再按照(3)依次进行;
(5)直到遍历完整个树,stack里的元素都将弹出,最后栈为空,DFS遍历完成。
二、广度优先搜索
广度优先搜索(也称宽度优先搜索,缩写BFS,以下采用广度来描述)是连通图的一种遍历算法这一算法也是很多重要的图的算法的原型。Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽度优先搜索类似的思想。其别名又叫BFS,属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。基本过程,BFS是从根节点开始,沿着树(图)的宽度遍历树(图)的节点。如果所有节点均被访问,则算法中止。一般用队列数据结构来辅助实现BFS算法。
基本步奏
(1)给出一连通图,如图,初始化全是白色(未访问);
(2)搜索起点V1(灰色);
(3)已搜索V1(黑色),即将搜索V2,V3,V4(标灰);
(4)对V2,V3,V4重复以上操作;
(5)直到终点V7被染灰,终止;
(6)最短路径为V1,V4,V7.
2. 百度搜索引擎的算法是怎样的
衡量网页质量的维度
网络搜索引擎在衡量网页质量时,会从以下三个维度综合考虑给出一个质量打分。下面会一一介绍这些影响网页质量判断的维度特征:
• 内容质量
• 浏览体验
• 可访问性
一个访问流畅,内容质量高且浏览体验好的网页具有较高的质量;反之,任何一个维度出现问题,都会影响网页的整体质量。下面我们具体介绍下这三个维度。
衡量网页质量的维度——内容质量
网页主体内容是网页的价值所在,是满足用户需求的前提基础。网络搜索引擎评价网页内容质量主要看其主体内容的好坏,以及主体内容是否可以让用户满意。 不同类型网页的主体内容不同,网络搜索引擎判断不同网页的内容价值时,需要关注的点也有区别,如:
• 首页:导航链接和推荐内容是否清晰、有效。
• 文章页:能否提供清晰完整的内容,图文并茂更佳。
• 商品页:是否提供了完整真实的商品信息和有效的购买入口。
• 问答页:是否提供了有参考价值的答案。
• 下载页:是否提供下载入口,是否有权限限制,资源是否有效。
• 文档页:是否可供用户阅读,是否有权限限制。
• 搜索结果页:搜索出来的结果是否与标题相关。
网络搜索引擎考量网页内容质量的维度非常多,最为重要的是:成本;内容完整;信息真实有效以及安全。下面我们通过举例来感受一下网络搜索引擎是如何对网页的内容质量进行分类的,请站长对比自己站点的页面,站在搜索引擎和用户的角度为自己打分:
1、内容质量好:
网络搜索引擎认为内容质量好的网页,花费了较多时间和精力编辑,倾注了编者的经验和专业知识;内容清晰、完整且丰富;资源有效且优质;信息真实有效;安全无毒;不含任何作弊行为和意图,对用户有较强的正收益。对这部分网页,网络搜索引擎会提高其展现在用户面前的机率。例如:
• 专业医疗机构发布的内容丰富的医疗专题页面;
• 资深工程师发布的完整解决某个技术问题的专业文章;
• 专业视频网站上,播放清晰流畅的正版电影或影视全集页面;
• 知名B2C网站上,一个完整有效的商品购买页;
• 权威新闻站原创或经过编辑整理的热点新闻报道;
• 经过网友认真编辑,内容丰富的词条;
• 问答网站内,回答的内容可以完美解决提问者的问题。
实例参考:
示例
内容质量
说明
case 3.1.1-1
好
专业医疗网站发布的丰富医疗专题页面
case 3.1.1-2
好
资深工程师发布的完整解决某个技术问题的专业文章
case 3.1.1-3
好
专业视频网站上,播放清晰流畅的正版影视全集页面
case 3.1.1-4
好
京东的一个完整有效的商品购买页
case 3.1.1-5
好
权威新闻站原创的热点新闻的报道
case 3.1.1-6
好
经过网友认真编辑,内容丰富的网络词条
case3.1.1-7
好
网络知道上,完美解决用户问题的问答页
2、内容质量中:
内容质量中等的网页往往能满足用户需求,但未花费较多时间和精力进行制作编辑,不能体现出编者的经验和专业知识;内容完整但并不丰富;资源有效但质量欠佳;信息虽真实有效但属采集得来;安全无毒;不含作弊行为和意图。在互联网中,中等质量网页其实是一个比较大的数量集合,种类面貌也繁杂多样,网络搜索引擎在评价这类网页时往往还要考虑其它非常多因素。在这里,我们仅部分举例来让各位感受一下:
• 论坛类网站里一个普通的帖子;
• 一个普通的问答网页;
• 没有进行任何编辑,直接转载其它网站的新闻;
• 无版权信息的普通电影播放页
• 采集知名小说网站的盗版小说页。
实例参考:
示例
内容质量
说明
case 3.1.2-1
中
网易直接转载了中国新闻网的一篇新闻。
case 3.1.2-2
中
文库上网友上传的“国庆放假安排”新闻
case 3.1.2-3
中
采集起点小说网的盗版小说站
case 3.1.2-4
中
网络贴吧里一个普通的帖子
3、内容质量差:
网络搜索引擎认为主体内容信息量较少,或无有效信息、信息失效过期的都属于内容质量差网页,对用户没有什么实质性的帮助,应该减少其展现的机会。同时,如果一个网站内该类网页的占比过大,也会影响网络搜索引擎对站点的评级,尤其是UGC网站、电商网站、黄页网站要尤其重视对过期、失效网页的管理。例如:
• 已下架的商品页,或已过期的团购页;
• 已过有效期的招聘、交易页面;
• 资源已失效,如视频已删除、软件下载后无法使用等。
4、没有内容质量可言:
没有内容质量可言的网页指那些制作成本很低,粗制滥造;从别处采集来的内容未经最起码的编辑整理即放置线上;挂木马等病毒;含有作弊行为或意图;完全不能满足用户需求,甚至含有欺骗内容的网页。例如:
• 内容空短,有很少量的内容,却不能支撑页面的主要意图;
• 问答页有问无答,或回答完全不能解决问题;
• 站内搜索结果页,但没有给出相关信息
除上述网页外,欺骗用户和搜索引擎的网页在无内容质量可言集合里占很高比例。网络搜索引擎对作弊网页的定义是:不以满足用户需求为目的,通过不正当手段欺骗用户和搜索引擎从而获利的网页。目前互联网上这部分网页还属少数,但作弊网页的价值是负向的,对用户的伤害非常大,对这类网页,搜索引擎持坚决打击态度。
衡量网页质量的维度——浏览体验
不同质量的网页带给用户的浏览体验会有很大差距,一个优质的网页给用户的浏览体验应该是正向的。用户希望看到干净、易阅读的网页,排版混乱、广告过多会影响用户对网页主体内容的获取。在网络搜索引擎网页质量体系中,用户对网页主体内容的获取成本与浏览体验呈反比,即获取成本越高,浏览体验越低。面对内容质量相近的网页,浏览体验佳者更容易获得更高的排位,而对于浏览体验差的网页,网络搜索引擎会视情况降低其展现的机率甚至拒绝收录。
影响用户浏览体验好坏的因素很多,目前网络搜索引擎主要从内容排版、广告影响两方面对网页进行考量:
内容排版:用户进入网页第一眼看到的就是内容排版,排版决定了用户对网页的第一印象,也决定了用户对内容获取的成本。
广告影响:网络搜索引擎理解网站的生存发展需要资金支持,对网页上放置正当广告持支持态度。网页应该以满足用户需求为主旨,最佳状态即“主体内容与广告一起满足用户需求,内容为主,广告为辅”,而不应让广告成为网页主体。
下面我们通过举例来感受一下网络搜索引擎是如何对网页的浏览体验进行分类的,站长可以据此对比检验自己站点的浏览体验如何:
1、浏览体验好:
页面布局合理,用户获取主体内容成本低,一般具有以下特征:
• 排版合理,版式美观,易于阅读和浏览;
• 用户需要的内容占据网页最重要位置;
• 能够通过页面标签或页面布局十分清楚地区分出哪些是广告;
• 广告不抢占主体内容位置,不阻碍用户对主要内容的获取;
实例参考:
示例
浏览体验
说明
case 3.2.1-1
好
招聘、房产等网站首页也有很多广告,但都是招聘相关的,浏览体验是ok的。
case 3.2.1-2
好
文章页,页面布局合理,无广告,排版好,结构合理
case 3.2.1-3
好
游戏首页,排版美观,布局合理,无广告,浏览体验优
2、浏览体验差:
页面布局和广告放置影响了用户对主体内容的获取,提高了用户获取信息的成本,令用户反感。包括但不仅限于以下情况:
• 正文内容不换行或不分段,用户阅读困难;
• 字体和背景颜色相近,内容辨别困难;
• 页面布局不合理,网页首屏看不到任何有价值的主体内容;
• 广告遮挡主体内容;或者在通用分辨率下,首屏都是广告,看不到主体内容;
• 弹窗广告过多;
• 影响阅读的浮动广告过多
• 点击链接时,出现预期之外的弹窗;
• 广告与内容混淆,不易区分;
衡量网页质量的维度——可访问性
用户希望快速地从搜索引擎获取到需要的信息,网络搜索引擎尽可能为用户提供能一次性直接获取所有信息的网页结果。网络搜索引擎认为不能直接获取到主体内容的网页对用户是不友好的,会视情况调整其展现机率。
网络搜索引擎会从正常打开、权限限制、有效性三方面判断网页的可访问性,对于可以正常访问的网页,可以参与正常排序;对于有权限限制的网页,再通过其它维度对其进行观察;对于失效网页,会降权其展现机制甚至从数据库中删除。
1、可正常访问的网页
无权限限制,能直接访问所有主体内容的网页。
2、有权限限制的网页
此类网页分为两种:打开权限和资源获取权限
1)打开权限:指打开网页都需要登录权限,没有权限完全无法看到具体内容,普通用户无法获取或获取成本很高,网络搜索引擎会降低其展现机率。不包括以登录为主要功能的网页。
2)资源获取权限:指获取网页主要内容,如文档、软件、视频等,需要权限或者需要安装插件才能获得完整内容。此时会分三种情况:
• 提供优质、正版内容的网站,由于内容建设成本很高,尽管查看全文或下载时需要权限或安装插件,但属于用户预期之内,网络搜索引擎也不认为权限行为对用户造成伤害,给予与正常可访问页面相同的对待。
• 对于一些非优质、非正版的资源,来自于用户转载甚至机器采集,本身成本较低,内容也不独特,用户获取资源还有权限限制——需要用户注册登录或者付费查看,网络搜索引擎会根据具体情况决定是否调整其展现。
• 还有一些视频、下载资源页,也许自身资源质量并不差,但需要安装非常冷门的插件才能正常访问,比如要求安装“xx大片播放器”,网络搜索引擎会怀疑其有恶意倾向。
实例参考:
示例
可访问性
说明
case 3.2-1
好
CNKI上的一篇论文,收费才能下载,但有版权,浏览体验好
case 3.2-2
好
优酷上一部新电影,需要付费才能观看,浏览体验好。
case 3.2-3
中
内容是来,但是需要登录才能看更多
case 3.2-4
差
入党申请书,本身就是转载的,网上到处都是,但这个页面仍然要求收费才能下载。
3、失效网页
往往指死链和主体资源失效的网页。网络搜索引擎认为这部分网页无法提供有价值信息,如果站点中此类网页过多,也会影响网络搜索引擎对其的收录和评级。建议站长对此类网页进行相应设置,并及时登录网络站长平台,使用死链提交工具告知网络搜索引擎。
失效网页包括但不仅限于:
• 404、403、503等网页;
• 程序代码报错网页;
• 打开后提示内容被删除,或因内容已不存在跳转到首页的网页;
• 被删除内容的论坛帖子,被删除的视频页面(多出现在UGC站点)
具体请参阅《网络搜索引擎网页质量白皮书》,望采纳!
3. 棋类游戏的算法有哪些
棋类游戏的算法有哪些
棋类游戏通常包含三大要素:棋盘、棋子和游戏规则,其中游戏规则又包括胜负判定规则、落子的规则以及游戏的基本策略。下面我来给大家讲讲各类棋类游戏的算法。
除了棋盘和棋子的建模,棋类游戏最重要的部分就是AI算法的设计。目前棋类游戏的AI基本上就是带启发的搜索算法,那么常用的搜索算法有哪些呢?
1. 博弈与博弈树
博弈可以理解为有限参与者进行有限策略选择的竞争性活动,比如下棋、打牌、竞技、战争等。根据参与者种类和策略选择的方式可以将博弈分成很多种,比如“二人零和、全信息、非偶然”博弈,也就是我们常说的零和博弈(Zero-sum Game)。所谓“零和”,就是有赢必有输,不存在双赢的结果。所谓“全信息”,是指参与博弈的双方进行决策时能够了解的信息是公开和透明的,不存在信息不对称的情况。比如棋类游戏的棋盘和棋子状态是公开的,下棋的双方都可以看到当前所有棋子的位置,但是很多牌类游戏则不满足全信息的条件,因为牌类游戏都不会公开自己手中的牌,也看不到对手手中的牌。所谓的“非偶然”,是指参与博弈的双方的决策都是“理智”的行为,不存在失误和碰运气的情况。
在博弈过程中,任何一方都希望自己取得胜利,当某一方当前有多个行动方案可供选择时,他总是挑选对自己最为有利同时对对方最为不利的那个行动方案。当然,博弈的另一方也会从多个行动方案中选择一个对自己最有利的方案进行对抗。参与博弈的双方在对抗或博弈的过程中会遇到各种状态和移动(也可能是棋子落子)的选择,博弈双方交替选择,每一次选择都会产生一个新的棋局状态。
假设两个棋手(可能是两个人,也可能是两台计算机)MAX和MIN正在一个棋盘上进行博弈。当MAX做选择时,主动权在MAX手中,MAX可以从多个可选决策方案中任选一个行动,一旦MAX选定某个行动方案后,主动权就转移到了MIN手中。MIN也会有若干个可选决策方案,MIN可能会选择任何一个方案行动,因此MAX必须对做好应对MIN的每一种选择。如果把棋盘抽象为状态,则MAX每选择一个决策方案就会触发产生一个新状态,MIN也同样,最终这些状态就会形成一个状态树,这个附加了MAX和MIN的决策过程信息的状态树就是博弈树(Game Tree)。
2. 极大极小值搜索算法
极大极小值(Min-Max)搜索算法是各种博弈树搜索算法中最基础的搜索算法。假如MAX和MIN两个人在下棋,MAX会对所有自己可能的落子后产生的局面进行评估,选择评估值最大的局面作为自己落子的选择。这时候就该MIN落子,MIN当然也会选择对自己最有利的局面,这就是双方的博弈,即总是选择最小化对手的'最大利益(令对手的最大利益最小化)的落子方法。作为一种博弈搜索算法,极大极小值搜索算法的名字就由此而来。
3. 负极大值搜索算法
博弈树的搜索是一个递归的过程,极大极小值算法在递归搜索的过程中需要在每一步区分当前评估的是极大值节点还是极小值节点。1975年Knuth和Moore提出了一种消除MAX节点和MIN节点区别的简化的极大极小值算法,称为负极大值算法Negamax。该算法的理论基础是:
max(a,b) = -min(-a, -b)
简单地将递归函数MiniMax()返回值取负再返回,就可以将所有的MIN 节点都转化为MAX节点,对每个节点的搜索都尝试让节点值最大,这样就将每一步递归搜索过程都统一起来。
4. “α-β”剪枝算法
有很多资料将“α-β”剪枝算法称为“α-β”搜索算法,实际上,它不是一种独立的搜索算法,而是一种嫁接在极大极小值算法和负极大值算法上的一种优化算法。“α-β”剪枝算法维护了一个搜索的极大极小值窗口:[α,β]。其中α表示在搜索进行到当前状态时,博弈的MAX一方所追寻的最大值中最小的那个值(也就是MAX的最坏的情况)。在每一步的搜索中,如果MAX所获得的极大值中最小的那个值比α大,则更新α值(用这个最小值代替α),也就是提高α这个下限。
而β表示在搜索进行到当前状态时,博弈的MIN一方的最小值中最大的那个值(也就是MIN的最坏的情况)。在每一步的搜索中,如果MIN所获得的极小值中最大的那个值比β小,则更新β值(用这个最大值代替β),也就是降低β这个上限。当某个节点的α≥β时,说明该节点的所有子节点的评估值既不会对MAX更有利,也不会对MIN更有利,也就是对MAX和MIN的选择不会产生任何影响,因此就没有必要再搜索这个节点及其所有子节点了。
5. 估值函数
对于很多启发式搜索算法,其“智力”的高低基本上是由估值函数(评估函数)所决定,棋类游戏的博弈树搜索算法也不例外。
估值函数的作用是把一个棋局量化成一个可直接比较的数字,这个数字在一定程度上能反映取胜的概率。棋局的量化需要考虑很多因素,量化结果是这些因素按照各种权重组合的结果。这些因素通常包括棋子的战力(棋力)、双方棋子占领的空间、落子的机动性、威胁性(能吃掉对方的棋子)、形和势等。
6. 置换表与哈希函数
置换表(transposition table)也是各种启发式搜索算法中常用的辅助算法,它是一种以空间换时间的策略,使用置换表的目的就是提高搜索效率。一般情况下,置换表中的每一项代表者一个棋局中最好的落子方法,直接查找置换表获得这个落子方法能避免耗时的重复搜索,这就是使用置换表能大幅提高搜索效率的原理。
使用置换表最大的问题是置换表的组织和查找的效率。一般来说,置换表越大,查找的命中率就越高。但这个关系不是绝对的,当置换表大小达到一定规模后,不仅不会再提高命中率,反而会因为耗时的查找操作影响算法的效率。所以置换表不是越大越好,需要根据计算机的性能以及搜索的深度选择一个合适的大小。此外,为了查找操作更高效,通常都会用可直接访问的哈希表方式组织置换表,哈希函数的性能就成为影响置换表性能的重要因素。棋类游戏普遍采用Zobrist哈希算法。
4. 百度和Google的搜索算法,技术有何差异
网络是中国的,谷歌是美国的。各有侧重不能不可比较。技术都是一样的侧重不同罢了。网络侧重的是中国民俗,谷歌是侧重美国民俗。因为国情国法不同所以无可能比较量级。【搜索引擎技术是硬件加软件。硬件是实际使用的机器,软件是程序编程】搜索产品搜索引擎产品其实包括很多种类,并不限于我们最熟悉的全网搜索引擎。简单分类罗列一下:*全网搜索:包括市场份额最高的几大搜索引擎巨头,Google,Yahoo,Bing。*中文搜索:在中文搜索市场中,网络一家独大,其它几家如搜狗、搜搜、有道,市场份额相对还比较小。*垂直搜索:在各自的垂直领域成为搜索入口的,购物的淘宝,美食的大众点评,旅游的去哪儿,等等。*问答搜索:专注于为问句式提供有效的答案,比如Ask.com;其它的如问答社区像Quora和国内的知乎,应该也会往这方面发展。*知识搜索:典型代表就是WolframAlpha,区别于提供搜索结果列表,它会针对查询提供更详细的整合信息。*云搜索平台:为其它产品和应用提供搜索服务托管平台(SaaS或是PaaS),Amazon刚刚推出它的CloudSearch,IndexTank在被Linkedin收购之前也是做这项服务。*其它:比始DuckDuckGo,主打隐私保护,也有部分用户买帐。各种搜索产品在各自领域都需要解决特定的技术和业务问题,所以也可以建立相对通用搜索的优势,来得到自己的市场和用户。搜索技术搜索引擎所涉及和涵盖的技术范围非常广,涉及到了系统架构和算法设计等许多方面。可以说由于搜索引擎的出现,把互联网产品的技术水平提高到了一个新的高度;搜索引擎无论是在数据和系统规模,还是算法技术的研究应用深度上,都远超之前的简单互联网产品。列举一些搜索引擎所涉及到的技术点:*爬虫(Crawling)*索引结构(InvertedIndex)*检索模型(VSM&TF-IDF)*搜索排序(RelevanceRanking&Evaluation)*链接分析(LinkAnalysis)*分类(Document&QueryClassification)*自然语言处理(NLP:Tokenization,Lemmatization,POSTagging,NER,etc.)*分布式系统(DistributedProcessing&Storage)*等等虽然搜索引擎涉及的技术方方面面,但归结起来最关键的几点在于:*系统:大规模分布式系统,支撑大规模的数据处理容量和在线查询负载*数据:数据处理和挖掘能力*算法:搜索相关性排序,查询分析,分类,等等系统搜索引擎系统是一个由许多模块组成的复杂系统。核心模块通常包括:爬虫,索引,检索,排序。除了必需的核心模块之外,通常还需要一些支持辅助模块,常见的有链接分析,去重,反垃圾,查询分析,等等。[附图:搜索系统架构概念模型]*爬虫从互联网爬取原始网页数据,存储于文档服务器。*文档服务器存储原始网页数据,通宵是分布式Key-Value数据库,能根据URL/UID快速获取网页内容。*索引读取原始网页数据,解析网页,抽取有效字段,生成索引数据。索引数据的生成方式通常是增量的,分块/分片的,并会进行索引合并、优化和删除。生成的索引数据通常包括:字典数据,倒排表,正排表,文档属性等。生成的索引存储于索引服务器。*索引服务器存储索引数据,主要是倒排表。通常是分块、分片存储,并支持增量更新和删除。数据内容量非常大时,还根据类别、主题、时间、网页质量划分数据分区和分布,更好地服务在线查询。*检索读取倒排表索引,响应前端查询请求,返回相关文档列表数据。*排序对检索器返回的文档列表进行排序,基于文档和查询的相关性、文档的链接权重等属性。*链接分析收集各网页的链接数据和锚文本(AnchorText),以此计算各网页链接评分,最终会作为网页属性参与返回结果排序。*去重提取各网页的相关特征属性,计算相似网页组,提供离线索引和在线查询的去重服务。*反垃圾收集各网页和网站历史信息,提取垃圾网页特征,从而对在线索引中的网页进行判定,去除垃圾网页。*查询分析分析用户查询,生成结构化查询请求,指派到相应的类别、主题数据服务器进行查询。*页面描述/摘要为检索和排序完成的网页列表提供相应的描述和摘要。*前端接受用户请求,分发至相应服务器,返回查询结果[附图:爬虫系统架构]爬虫系统也是由多个模块构成:*URLScheler存储和高度待爬取的网页地址。*Downloader根据指定的网页列表爬取网页内容,存储至文档服务器。*Processer对网页内容进行简单处理,提取一些原始属性,为爬取的后续操作服务。*TrafficController爬取流量控制,防止对目标网站在短时间内造成过大负载[附图:搜索系统架构实例:Google这是Google早期的一张系统架构图,可以看出Google系统的各模块基本和前面概念模型一致。所以一个完整的全网搜索系统的大致系统架构是类似的,区别和竞争力体现在细节实现和优化上。数据除了搜索引擎系统提供了系统支撑外,搜索结果质量很大程度上依赖于源数据的数量和质量,以及数据处理的能力。全网数据的主要来源通常是从互联网上进行自动爬取,从一些高质量的种子站点开始,并沿网页链接不断,收集巨量的网页数据;这通常能达到数据在数量的要求,但也不可避免混入了大量的低质量网页。除了自动爬取来的数据外,搜索引擎的数据来源还可以来自人工收集、合作伙伴提供、第三方数据源和API、以及购买;这些来源通常会有更好的质量保证,但在数量规模和覆盖率上会相对少一些,可以和爬取的数据形成有效的互补。收集到足量的原始数据后,需要进行各种数据处理操作,把原始数据转换成在线检索需要的数据。这个过程通常包括:网页分析,数据抽取,文本处理和分词,索引及合并;最终生成的数据会包括:词典,倒排表,正排表,文档权重和各种属性。最终生成的数据要布署上相应的在线检索服务器上,通常会进行数据分区和分片布署,数据内容更丰富时还可能根据内容分类和主题进行分别布署,比如新闻时效类的网页可能就会独立布署,针对性地响应时效类的查询[附图:索引数据:字典、倒排表、正排表]这张图来源于Google早期的索引数据结构,包括词典、倒排表、正排表。算法有了相当数量的高质量数据之后,搜索结果的质量改进就取决于搜索算法的准确性上。现在的搜索引擎通常通过向量空间模型(VSM=VectorSpaceModel)来计算查询和各文档之间的文本相似性;即把查询或文档抽象成一个词向量,然后再计算向量在向量空间中的夹角,可以用余弦公式得出,作为文本相似度的度量值。在基本的向量空间模型基础上通常会进一步加入词的权重值进行改进,通过经典的TF-IDF公式得出,即词频(TF)乘上逆文档频率(IDF);其中TF=TermFrequency,即该词在所在文档中的出现次数;IDF=InvertDocumentFrequency,即包含该词的文档数除以总文档数,再取反,通常还会取对数来降维,这个值值越大表示这个词越能代表文档特征。除了通过向量空间模型得出的文本匹配评分外,每个文档还会有自己本身的质量评分,通常由网页链接数据计算得出,代表了该网页本身的流行度权重。最终的评分会以文本匹配的查询时动态评分和文档静态评分为基础计算得出;搜索引擎的评分计算都会考虑很多因素,但这两项通常是评分计算的基础。有了确定的排序算法后,另一个重要的任务就是评估搜索结果的质量。由于搜索结果的好与坏是一个比较主观的过程,所以进行定量的评估并不容易。常见的做法是通过事先选定一批查询,通过人工评估或是预先设定标准值的方式,逐个评估每个设定查询搜索结果,最终得到一个统计结果,作为搜索算法的评估度量。另一类做法是直接通过线上的用户点击数据来统计评估搜索结果质量,或是通过A/B测试来比较两种排序算法的点击效果来衡量。合理而有效的评估方法,是搜索算法可以不断改进和比较的前提。查询分析是另一个对搜索结果影响很大的方面,主要任务是把用户的查询文本转换成内部的结构化的搜索请求。涉及的处理可能包括基本的分词处理,专有名词的识别和提取,或是查询模式的识别,或是查询分类的识别。这些处理的准确性将能极大地改进搜索请求的方式,进一步影响搜索结果的相关性和质量。开源方案近年来在搜索公司内部搜索系统和技术的改进和发展的同时,一批开源的搜索系统和解决方案也逐渐发展和成熟起来。当然开源系统在功能全面性、复杂性和规模上都不能与专业的搜索引擎系统相比,但对于中小企业的搜索应用来说应该已经能很好地满足需求,而且也成功应用到了一些大规模的产品系统中(比如Twitter的搜索就使用和改进了Lucene)。现在比较常见的开源搜索解决方案有:*LuceneLucene自然是现在最流行,使用度最高的搜索开源方案。它用Java开发,以索引和检索库的方式提供,可以很容易地嵌入需要的应用中。*Solr&SolrCloudSolr是Lucene的子项目,同属Apache软件基金会项目;它是基于Lucene之上实的一个完整的搜索服务应用,提供了大量的搜索定制功能,可以满足大部分的搜索产品需求。SolrCloud是Solr为了加强其分布式服务能力而开发的功能,目前还在开发阶段,将在Solr4.0发布。*Zoie&Sensei(Linkedin)Zoie是Linkedin公司在Lucene基础上实现的准实时索引库,通过加入额外的内存索引,来达到准实时索引的效果。Sensei是Linkedin公司在Zoie基础上实现的分布式搜索服务,通过索引分区来实现分布式搜索服务。*ElasticSearchElasticSearch也是刚推出不久的一个基于Lucene实现的分布式搜索服务,据说在分布式支持和易用性上都有不错的表现。因为还比较年轻,真实的应用应该还不多,需要观察。因为也是基于Lucene的分布式开源搜索框架,基本上会与SolrCloud和Sensei形成正面竞争关系。*其它开源产品除了Lucene家族以外,还有一些其它的开源产品,比如Sphinx和Xapian,也有不少的应用;但近年来的更新频率和社区活跃度都不太能和Lucene系的产品相比。*托管平台除了开源产品外,现在还出现了一些基于云计算和云服务的搜索服务,比如Amazon新近推了的CloudSearch,还有更早一些的IndexTank(已被Linkedin收购)。这类服务无需自己布置搜索系统,直接使用在线服务,按需付费,所以也将是开源产品的替代方案和竞争对手。附几张上面提到的开源系统的概念模型和架构图:[附图:Lucene概念模型][附图:Lucene工作流程][附图:Sensei系统架构][附图:SolrCloud系统架构]现状与未来:传统的搜索引擎经过了十几年的发展,目前在技术和产品上都已走向逐渐稳定和成熟,通用搜索的市场也基本进入饱和,不像早些年一直呈现高增长率。同时,在各个垂直领域,也出现了很多和产品结合的很好的垂直搜索产品,比如淘宝的购物搜索,大众点评的美食搜索,去哪儿和酷讯的旅游搜索等,也都在各自领域占据了相当大的市场,成为除了通用搜索引擎之外的重要的用户入口。在开源领域,各种开源产品和解决方案也逐渐发展成熟,通用搜索技术不再为大公司所专有,中小企业能够以较低的成本实现自己的搜索应用。现在搜索引擎产品之间的竞争的在数据、应用方式和产品形态上,在系统架构和基本算法上区分并不大。搜索引擎在未来发展上,一是搜索将不仅仅以独立产品的形式出现,的会作为搜索功能整合到的产品和应用中。在产品形态上,基于传统的搜索引擎,会演化出像推荐引擎,知识引擎,决策引擎等形式的产品,更好地满足和服务用户需求。而搜索引擎所涉及和发展起来的各种技术,会更广泛地应用到各种基它产品上,比如自然语言处理,推荐和广告,数据挖掘,等等。总之,搜索引擎对互联网技术和产品带来的影响是巨大的,未来也仍将有很大的发展和应用空间。