搜索引擎核心技术笔记

搜索引擎发展史
1 分类目录:hao123 人工整理
2 文本检索:使用布尔模型、向量空间模型或者几率模型计算查询词和网页文本内容的相关程度
未考虑网页之间的连接关系
3 连接分析:google pagerank技术 未考虑用户的个性化需求
4 用户中心的一代:利用用户查询的时间、地点,过去发出的查询及点击记录来理解用户真正的需求

3个目标:更全 更快 更准

3个核心问题:用户的需求、哪些信息与其需求相关、哪些信息是能够被trust的

网络爬虫:进行网页去重、网页反做弊
互联网页分红5部分:已下载网页集合、已过时网页集合、待下载网页集合、可知网页集合(可经过连接关系发现)、不可知网页集合
爬虫分类:批量型爬虫(明确的抓取范围和目标)、增量型爬虫(持续抓取新网页和更新已有网页)、垂直型爬虫(如何识别网页内容是否属于指定行业)

优秀爬虫的特性:高性能、可扩展性、健壮性、友好性

抓取策略:宽度优先遍历策略(若是某个网页包含不少入链,颇有可能被早抓到,而入链个数体现网页重要性,隐含网页优先级假设)
非彻底PageRank策略(PageRank是全局算法,这是将已抓取和待抓取的网页结合计算分数,排序后再抓取)
(每当新下载的网页够k个,就从新计算非彻底PageRank值)
OPIC策略(online page importance computation)
每一个页面都给予相同的cash,每当页面下载后,就将手中的cash平均分给页面中包含的连接页面,而后本身的
cash清空。对于待抓取页面来讲,根据手中cash多少排序后优先下载。
大战有限策略:某个网站等待下载的页面越多就优先。

网页更新策略:(保持已下载页面内容与互联网页面内容同步)历史参考策略、用户体验策略、聚类抽样策略。
历史参考策略:过去频繁更新的页面的未来也会频繁更新。(利用泊松过程来对网页变化进行建模)
用户体验模型:页面变化对搜索质量影响越大就越快更新。
聚类抽样策略:网页有属性,根据属性对网页分类,同一类的更新周期差很少。

暗网抓取:暗网(搜索引擎很难按照常规方式抓取的页面,好比数据库中的数据)
模拟人的操做,挑战(一是查询组合太多(对网站压力大),二是有的查询是文本框(如何填入内容))
查询组合问题:
Google,富含信息查询模板技术,多个维度,若是模板内每一个属性都赋值,造成不一样的查询组合,若是返回内容
相差较大,那这个查询模板就是富含信息查询模板。
若是内容重复太多,有可能模板维度过高,致使不少组合无搜索结果。
文本框填写:首先须要人工提供一个与网站内容相关的初始种子查询关键词表。以后根据返回内容自动挖掘出关键词,造成
新的查询列表。

分布式爬虫:主从式、对等式。

搜索引擎索引:单词文档矩阵、倒排索引
单词词典:哈希加链表、树形结构(B树,最底层的叶子节点存储单词地址信息)
倒排列表:倒排索引项(文档编号、单词在文档中出现次数、出现位置)
实际存储的是文档编号差值,能够更好的对数据进行压缩(通常构建索引的时候能够保证文档编号的顺序)

创建索引:两遍文档遍历法、排序法、归并法
两遍文档遍历:第一次遍历主要目的是得到一些统计信息(文档个数N,不一样单词数M,单词在文档中出现几回DF),根据
统计信息分配内存资源。第二次遍历主要构建索引
排序法:始终在内存中分配固定大小的空间,用来存放词典信息和索引中间结果,当分配的空间被消耗光,就把中间结果写
入磁盘。
中间结果内存排序:当分配的内存定额占满了之后对三元组中间结构进行排序。排序规则:单词id、文档id
合并中间结果:将缓冲区包含的同一个单词id的三元组进行合并,若是单词的全部三元组所有合并,写入最终索引。
缺点:词典信息(单词到单词ID的映射)在内存中维护,随着文档数增长,词典项增长,占用内存多。
归并法:流程与排序法差很少,两个不一样点。
1 排序法中词典与三元组不要紧。归并法中,词典和三元组一块儿构成索引项。
2 中间结果写入临时文件,归并法将词典信息连同中间结果一块儿写入磁盘文件。

动态索引:倒排索引、临时索引、已删除文档列表
倒排索引:词典存在内存中,到排列表在磁盘上。
临时索引:有新文档进入就实时追加进来
已删除文档列表:已删除文档id列表(一个文档被更改能够认为是先删除后添加)
用户查询过程:同时从倒排索引和临时索引中查找。找完以后合并。最后利用已删除列表过滤。

索引更新策略:彻底重建策略、再合并策略、原地更新策略、混合策略。
彻底重建:新文档与之前文档合并后从新创建索引。(适合小文档集合)
再合并策略:内存中维护临时索引,当内存将耗尽时把临时索引与老文档的倒排索引进行合并生成新索引。
优缺点:效率高,由于老索引已经排序,顺序读取减小寻道时间。缺点:由于要生成新的倒排索引因此有的没变化的索
引也要读出来并入新索引。
原地更新策略:不生成新的索引文件,直接追加操做。只更新增量索引里的单词相关信息。
优缺点:倒排列表通常顺序存储(为了加快读取速度),就要为追加信息预留空间。空间不足,会发生迁移。迁移破坏
索引的单词连续性,必须维护一个单词到倒排文件的映射。另外,为知足迁移操做,就须要对磁盘可用空间进行维护和
管理,成本高。实际效率低。
混合策略:针对不一样的单词性质进行分类。例如:长倒排列表单词用原地更新策略,短的用再合并策略。原地更新对磁盘的
读写少,再合并多。

查询处理:一次一单词、一次一文档、跳跃指针
一次一文档:以到排列表文档为单位,每次将其中某个文档与查询的最终类似性得分计算完毕,计算完全部再总排序。
一次一单词:针对每一个单词对应的文档计算类似性得分,依次计算其余单词对应文档的,若是发现某个文档有得分就累加。
跳跃指针:快速找出两个到排列表中相同的文档。由于有序可使用一次归并。可是若是保存的是文档编号差值无法用归
并。跳跃指针基本思想:将一个倒排列表数据化整为零,切分红块。每一个块增长一个元信息点(存储本块最小的
文档id,以及下一个块元信息点的地址)。
优势:查找快速。不须要所有数据解压缩。节省内存空间。
设定数据块的大小是关键。根据数据状况选择块大小。

多字段索引:多索引方式、倒排列表方式、扩展列表方式
多索引:每一个字段一个索引
倒排列表方式:将字段信息存储在倒排列表内。
扩展列表方式:使用比较多。对每一个字段创建一个列表,记载每一个文档这个字段的位置信息。例如<1,(1,4)>表明文档1的标
题出如今第1个到第4个词

短语查询:位置信息索引、双词索引、短语索引、混合方法
位置信息索引:索引记载单词位置信息<5,2,[3,7]>,5号文档中出现关键词2次,分别在3,7的位置上。查询出位置后判断是
否相邻构成短语。有的时候计算会很复杂。
双词索引:针对双词短语作快速查询,由于双词所占比例巨大。1是首词,2是下词。首词指向下词,下词指向短语的倒排索
引。会使得索引急剧增加,通常只针对计算代价高的短语创建双词索引。
短语索引:直接以短语为单位创建索引。缺点:不可能事先将全部短语都建好索引。为热门短语作索引。
混合方法:位置索引适合常规的短语查询。
双词索引适合处理计算代价较高的短语查询。
短语索引适合处理热门短语或者文本中高频度出现的短语。
用户查询---->短语索引---->双词索引---->常规索引

分布式索引:按文档划分、按单词划分(搜索系统的查询处理只能一次一单词的方式)
两种方式的比较:
1 可扩展性:按文档很容易增长新的文档。按单词则几乎全部的服务器都受影响。
2 负载均衡:有些单词常常出现,有些不多出现。按单词负载不平衡。
3 容错性:服务器故障对于按文档划分只会影响一部分文档。
4 对查询处理方式的支持:按文档同时支持不一样的查询方式。按单词只支持一次一单词方式。

索引压缩
词典压缩:词典中每一项通常存储至少3项:单词自己内容、文档频率、指向倒排索引的指针。
两种方案。单词长度不一致容易出现浪费,由于要申请足够的空间。
1 能够将单词连续存储在某个内存区域。原先存储单词内容的部分改成指向这个单词起始位置的指针,单词结尾经过下一个
单词的指针判断。
2 将连续词典分块。每几个单词一个块,这几个单词共享一个指针,在单词之间增长单词长度信息为间隔。
倒排列表压缩算法:压缩指标(压缩率、压缩速度、解压缩速度)
Elias Gamma算法与Elias Delta算法:
Golomb算法与Rice算法:
变长字节算法:每一个字节8位,第一位作标记为1表示后续字节属于当前压缩数据,为0表示后续为最后一个字节。对于一个
字节出去第一位,其他7位最大127,按128作基数对数进行因式分解,例如:
33549=2*128*128 + 6*128 + 13,三个字节分别存储2,6,13
SimpleX系列算法:
PForDelta算法:

文档编号重排序:
重排文档编号,使得倒排列表中相邻两个文档编号相邻。从而减少文档编号差值。便于压缩。
内容类似的文档编号越接近,由于有大量重复。(聚类、将url类似的网页聚合在一块儿,由于同一个网站的内容近似)

静态索引裁剪:(不重要的索引项从倒排索引中清除,对计算相关性得分不重要)以单词为中心的索引裁剪、以文档为中心的索引裁剪
以单词为中心:计算单词和其对应文档的相关性,设置阈值,选择至少k个显示。
以文档为中心:首先对文档缩水再创建索引。保留重要词抛弃不重要的词(可是容易形成有些词的倒排列表为空,好比的)

检索模型与搜索排序(网页与查询的相关性)


连接分析(网页重要性)
随机游走模型:PageRank(主题敏感PageRank、智能游走模型、偏置游走模型)
子集传播模型:HITS算法、Hilltop算法
PageRank算法:两个假设:1 数量假设:一个网页的入链数越多则网页越重要。
2 质量假设:越是高质量的网页指向网页A,A越重要。
PageRank赋予每一个网页相同的重要性得分,经过迭代计算来更新每一个页面的PageRank得分,知道稳定。
每一轮计算中,将当前页面的PageRank值平均分给页面包含的出链上。每一个页面将全部入链的权值求和。
连接陷进和远程跳转:环形结构(封闭的环形),使得只吸入传入的分值而没法将分值传播出去。
远程跳转:解决连接陷进。网页向外传递分值的时候能够以必定几率向任意其余网页跳转。
HITS算法:
Hub页面与Authority页面:Authority页面:与某个领域或者话题相关的高质量网页
Hub页面:包含不少指向高质量Authority页面连接的网页
相互加强关系:(Hub页面和Authority页面的相互加强关系)
基本假设1:一个好的Authority页面会被不少好的Hub页面指向。
基本假设2:一个好的Hub页面会指向不少好的Authority页面。
HITS算法:
HITS算法与用户输入的查询请求密切相关,而PageRank算法查询无关的全局算法。
首先将搜索提交给现有的搜索引擎,从返回结果中提取一部分做为根集。
在根集基础上扩充,原则:有连接指向根内页面,或者有根内页面指向的页面。
每一个页面设立两个权值,分别记载这个页面是好的Hub页面或者Authority页面。
迭代计算直到稳定。Authority权值为全部指向本网页的Hub权值之和。
Hub页面的权值为所指向的页面的Authority权值之和。
HITS算法存在的问题:
计算效率低(与查询相关,须要实时计算)
主题漂移问题(扩展网页中包含与主题无关的页面)
易被做弊者操纵结果(创建一个高质量的Hub页面,再用高质量的Hub页面指向做弊网页,提高其Authority得分)
结构不稳定(添加和删除个别网页或者改变连接关系,对排名影响很大)
HITS与PageRank的比较:
1 HITS与用户输入有关,PageRank无关。
2 HITS算法须要实时计算,PageRank爬虫抓取结束后离线计算。
3 HITS算法的计算对象数量少,只计算扩展集合内网页的连接关系。
4 PageRank更适合服务端,HITS更适合客户端。
5 HITS存在主题泛华,适合具体的查询。PageRank适合宽泛的查询。
6 反做弊。PageRank算法从机制上优于HITS算法。
7 HITS算法结构不稳定。

网页反做弊
内容做弊:(增长词频、增长主题无关内容吸引流量、关键位置插入目标做弊词)
1 关键词重复
2 无关查询词做弊:增长与页面主题无关的关键词
3 图片alt标签文本做弊:标签的描述信息。HTML页面不会显示可是搜索引擎会利用。
4 网页标题做弊。
5 网页重要标签做弊。HTML中有强调重要性的标签,好比加粗,做弊者利用这些。
6 网页元信息做弊
内容农场:经过大量低质量的内容吸引流量。经过人工写做形成,不容易界定。
连接做弊:连接农场、Google轰炸
连接农场:大量互相紧密连接的网页集合。
Google轰炸:设计锚文字(某个网页的连接描述文字,设计成与主题无关)
交换友情连接:有些正常网站也有友情连接。
购买连接:花钱提升排名
购买过时域名:有些过时域名的PageRank排名高。
“门页”做弊:门页不包括正文内容,由大量的连接构成,这些连接指向同一个网站内的页面,做弊者制造大量门页提高网
站排名。
页面隐藏做弊:搜索引擎抓取的页面内容与用户点击查看的不一致。
1 IP地址隐形做弊:记载搜索引擎爬虫的IP地址列表,若是发现是搜索引擎请求页面,就返回一个伪造的页面内容。
2 HTTP请求隐形做弊:协议中有一项用户代理项(User Agent)。经过它判断是不是爬虫。通常都颇有特色。
3 网页重定向:用户访问的话重定向到一个新网页。
4 页面内容隐藏: 经过HTML特殊的标签设置,将一部份内容设为不可见,只对搜索引擎可见。
Web2.0做弊方法:
1 博客做弊:做弊博客、博客评论做弊、TrackBack做弊
2 点评做弊:
3 标签做弊:有些网站容许对内容打标签,做弊者会在标签中加入推广内容吸引流量。
4 SNS做弊:
5 微博做弊
反做弊思路:信任传播模型、不信任传播模型、异常发现模型
1 信任传播模型:筛选出部分彻底信任的页面,白名单内的节点经过连接关系将信任度分值向外传播扩散,若是最后某个节
点的信任度分值高于必定阈值,则认为没有问题。
不一样算法的差别: 如何获取最初的信任页面。信任度如何传播。
2 不信任传播模型:选出黑名单,将不信任关系传播下去。
3 异常发现模型:基本假设:做弊网页有异于正常网页。
反做弊算法的基本假设:
1 不多有高质量的网页将连接指向做弊网站
2 做弊网页之间倾向于互相指向
通用做弊反连接方法:TrustRank、BadRank、SpamRank
1 TrustRank算法:步骤1:肯定值得信任的网页集合
初选策略 1:高PageRank分值网页,认为高PageRank得分的网页是可信赖的。
初选策略 2:逆PageRank,根据网页的出链传出的权值计算,先反转在计算PageRank
步骤2:将信任分值从白名单网页按照必定方式传播到其余网页
假设 1:距离可信网页越近的越值得信任,这里的距离指的是经过多少步连接中转能够到达。
假设 2:一个高质量网页包含的出链越少,那么被指向的网页越是高质量的网页的可能性越大。
TrustRank引入信任衰减因子和信任分值均分策略。
1 信任衰减:距离越远,获得的信任分值越低。注意:信任分值在0,1间,因此平方会变
小。
2 信任均值:将信任分值按照出链个数平均分配。
2 BadRank算法:基本假设:若是一个网页将其连接指向做弊网页,则这个网页颇有可能也是做弊网页。反过来则不必定。
首先找出做弊网页集合(黑名单),BadRank按照入链进行权值传播,与PageRank相反。
3 SpamRank算法:定义出正常的网页或者连接关系,而后判断网页是否知足。
对于某个网页,对其PageRank值贡献高的成为支持者。
基本假设:正常页面的支持者知足Power-Law统计分布,PageRank值有大有小,而做弊网页支持者有
以下特色:
1 支持者数量巨大
2 支持者页面PageRank值低
3 支持者页面PageRank值都在较小的范围

用户查询意图分析:
搜索日志挖掘:
查询会话:用户在较短期内连续发出多个查询。这些查询每每有必定的语义相关性。
点击图:假设:用户点击基本都是与用户查询相关的。
查询图:构建查询之间的相互关系。用户发出的查询与实际意图之间的关系。
相关搜索:查询推荐
1 基于查询会话的方法:
2 基于点击图的方法: