引擎最重要的是什么?
有人会说是查询结果的准确性,有人会说是查询结果的丰富性,但其实这些都不是搜索引擎最最致命的地方, 对于引擎来说,最最致命的是查询时间
试想一下如果你在百度界面上查询一个关键词,结果需要分钟才能将你的查询结果反馈给你,那结果必然是你很快的舍弃掉百度, 搜索引擎满足对速度苛刻的要求
(现在商业的搜索引擎的查询时间单位都是微秒数量级的),所以采用缓存支持查询需求的方式,也就是说我们在查询搜索时所得到的结果并不是及时的,而是在其服务器已经缓存好了的结果, 搜索引擎工作的大体流程是什么样子呢?
我们可以理解为三段式, 仅仅是对着三段工作流程进行大体上的讲解与综述,其中一些详细的技术细节将会用其它的文章进行单独的讲解,
一搜集网页搜集,其实就是大家常说的蜘蛛抓取网页, 对于蜘蛛(称之为机器人)来说,
他们感兴趣的页面分为三类:蜘蛛从未抓去过的新页面, 蜘蛛抓取,但页面内容有改动的页面, 蜘蛛抓取,但现在已删除了的页面, 如何行之有效的发现这三类页面并进行抓取,就是程序设计的初衷与目的, 这里就涉及到一个问题,蜘蛛抓取的起始点, 一位站长只要你的网站没有被严重降权,那么通过网站后台的服务器,你都可以发现勤劳的蜘蛛光顾你的站点,但是你们有没有想过从编写程序的角度上来说,蜘蛛是怎么来的呢?
针对于此,各方有各方的观点, 有一种说法说蜘蛛的抓取是从种子站(或叫高权重站),依照权重由高至低逐层出发的, 一种说法蜘蛛爬在集合中是没有明显先后顺序的,
搜索引擎会根据你网站内容更新的规律,自动计算出何时是爬取你网站的最佳时机,然后进行抓取, 其实对于不同的引擎,其抓取出发点定然会有所区别,针对于百度,笔者较为倾向于后者,
在百度博客发布的《索引页链接补全机制的一种办法》一文中,其明确指出“会尽量探测网页的发布周期,以合理的频率来检查网页”,
由此我们可以推断,在百度的索引库中,针对每个集合,其都计算出适合其的抓取时间以及一系列参数,
然后对相应站点进行抓取, 在这里,我要说下,就是针对百度来说,的数值并非是蜘蛛已抓取你页面的数值, ,
所得出的数值并不是大家常说的百度收录数值,想查询具体的百度收录量应该在百度提供的站长工具里查询索引数量, 是什么?
这个我会在今后的文章中为大家讲解, 蜘蛛如何发现新链接呢?其依靠的就是超链接, 我们可以把所有的网看成一个有向集合的聚集体,
蜘蛛由起始的集合沿着网页中超链接开始不停的发现新页面, 在这个过程中每发现新的都会与集合中已存的进行比对,若是新的,则加入集合中,
若是已在集合中存在,则丢弃掉, 对一个站点的遍历抓取策略分为两种,一种是深度优先,另一种就是宽度优先,
如果是百度这类商业搜索引擎,其遍历策略则可能是某种更加复杂的规则,例如涉及到域名本身的权重系数、
涉及到百度本身服务器矩阵分布等, 二处理预处理是搜索引擎最复杂的部分,基本上大部分排名算法都是在预处理这个环节生效,
搜索引擎在预处理这个环节,针对数据主要进行以下几步处理:提取关键词蜘蛛抓取到的页面与我们在浏览器中查看的源码是一样的,
通常代码杂乱无章,而且其中还有很多与页面主要内容是无关的, ,搜索引擎需要做三件事情:代码去噪, 掉网页中所有的代码,
仅剩下文本文字, 去除非正文关键词, 页面上的导航栏以及其它不同页面共享的公共区域的关键词, 去除停用词,
词是指没有具体意义的词汇,例如“的”“在”等, 当引擎得到这篇网页的关键词后,会用自身的分词系统,
将此文分成一个分词列表,然后储存在数据库中,并与此文的进行一一对应, 下面我说明, 假如爬取的页面的是,
而搜索引擎在此页面经过上述操作后提取到的关键词集合为,且是由关键词……组成,则在百度数据库中,
其相互间的关系是一一对应,如下图, 重复与转载网页每个搜索引擎其识别重复页面的算法均不相同,
但是其中笔者认为,如果将消重算法理解为由个元素组成,那么所有的搜索引擎恐怕其个元素都是完全一样的, 另外个元素,
则是根据不同的搜索引擎针对的态度不同,而专门设立的对应策略, 仅对搜索引擎大体流程进行初步讲解,
具体数学模型不多做讲解, 信息分析在进行代码除噪的过程中,搜索引擎并非简单的将其去除掉而已,
而是充分利用网页代码(例如标签、标签)、关键词密度、内链锚文本等方式分析出此网页中最重要的词组, 重要度分析通过指向该网页的外链锚文本所传递的权重数值,
来为此网页确定一个权重数值,同时结合上述的“重要信息分析”,
从而确立此网页的关键词集合中每一个关键词所具备的排名系数, 倒排文件上文所说,用户在查询时所得到的查询结果并非是及时的,
而是在搜索引擎的缓存区已经大体排好的,当然搜索引擎不会未卜先知,他不会知道用户会查询哪些关键词,
但是他可以建立一个关键词词库,而当其处理用户查询请求的时候,会将其请求按照词库进行分词, 这样下来,
搜索引擎就可以在用户产生查询行为之前,将词库中的每一个关键词其对应的排名先行计算好,
这样就大大节省了处理查询的时间了, 简单来说,引擎用控制器来控制蜘蛛爬取,
然后将集与原始数据库进行保存,保存之后再用索引器控制每个关键词与之间的对应关系,并将其保存在索引数据库中, 下面我们来说明假若页面被切词成=,,,……,,
则其在索引数据库中由下图方式体现, 上图是为了方便大家理解而做出来的,索引数据库实际上是搜索引擎中对性能要求最高的数据库,
因为里面所有因素都会受到算法影响,所以实际上的索引数据库我觉得应该是由多维数组所组成的较为复杂的索引表,
但其主要体现的大体作用与上图相同, 三、服务查询服务顾名思义,就是处理用户在搜索界面的查询请求, 搜索引擎构建检索器,
分三步来处理请求, 根据方式与关键词进行切词首先先把用户搜索的关键词切分为一个关键词序列,我们暂时用来表示,
则用户搜索的关键词被切分为=,,,……,, 再根据用户查询方式,例如是所有词连在一起,还是中间有空格等,
以及根据中不同关键词的词性,来确定所需查询词中每一个词在查询结果的展示上所占有的重要性, 结果排序我们有了搜索词集合,
中每个关键词所对应的排序——索引库,同时也根据用户的查询方式与词性计算出每个关键词在查询结果的展示上所占有的重要,
那么只需要进行一点综合性的排序算法,搜索结果就出来了, 搜索结果与文档摘要当有了搜索结果后,
搜索引擎就会将搜索结果展示在用户阅览的界面上以供用户使用, 在这里,大家可以两个个问题, 四、
百度的流程漏洞请原谅我用流程漏洞来形容这个模块,但我不得不说,在如今点击器横行的天下,
我觉得说是漏洞无可厚非, 那就是上面三个大环节外,百度还构建了用户行为模块,来影响原始数据库与索引库, 影响原始数据库的
,是百度的快照投诉,主要处理互联网暴利的一些行为,这点无可厚非, 影响索引库的,是用户的点击行为,
这个设计本身也无可厚非,但百度算法的不成熟,导致了点击器作弊猖獗, 百度的用户行为分析模块很简单除了自身投诉的提交入口外,
就是搜集用户在搜索界面的点击行为,如果此页面结果被大部分用户阅览,但没有产生点击,用户居然大部分选择点击第二页甚至更后面的页面,
则此现象就会被百度工程师们所知道,则会根据这方面来微调算法, 百度针对不同行业,其算法早已不同了, 如果前两页内某个界面被大量用户选择点击,
则通常会在小时候,这个搜索结果被大幅前提,甚至会被提升至第一名, 五、引擎大体流程图(加上用户行为分析器)以上就是我所对搜索引擎工作的基础流程与原理的理解,
最后我想说的从业者们应该已经发现无论是百度还是谷歌或者其它的商业搜索引擎,他们都会要求们不要去在意算法、
不要去在意搜索引擎,而是去多关注用户体验, 我们可以理解成一个比喻,搜索引擎是买西瓜的人,而们是种西瓜的人,
买西瓜的人要求我们这些种西瓜的人不要关心他们挑选西瓜的标准,而是多多在意怎么去种出好西瓜,
而对于什么样的西瓜是他们需要的好西瓜,他们又往往用一些模糊的概念掩盖过去, ,这样搜索引擎得到的结果将会多样化,
他们可以在挑选结果时有更多的选择,能够最大限度的维护这些商业搜索引擎自身的利益,但是请其也不要忘记,
我们这些种西瓜的也要有口饭吃, 始终坚持白帽,深入研究,做对用户有意义的站, 与此同时,我也坚信身为,
我们还应该对算法有及时了解,以便我们做出的站在符合用户口味的时候,更能在搜索引擎中得到良好的展现,
因为毕竟也是人,也希望过得好一点, 我将在其它的文章中逐步剖析搜索引擎的各个环节,并发表在我博客“搜索引擎原理”的栏目下,希望对大家有所帮助
还没有评论,来说两句吧...