爬虫
索引建立
正排:由key查找实体,拿url查找web page(title,anchor,content)
倒排:由term查询key,拿term查找 url list
rank打分排序
召回
倒排拉链后,过最小堆,然后算基础相关性 & 权威性 & 时效性,拟合得到score,筛选后,透传结果给粗排
粗排
拿到召回结果后,综合各类特征做一个简单的筛选后,透传给精排
精排
针对粗排结果上复杂NN模型算score
rerank
结合业务特点,对精排结果做筛选
人工先验:以先验知识为主,构建特征,设计排序算法
优点:业务迭代周期和效果非常清晰,可控
缺点:过度依赖于对于业务系统认知 & 人工拟合方式泛化能力不行,属于原始社会阶段
机器学习:结合特征工程用l2r替代排序算法拟合特征
优点:整个搜索迭代框架非常简便,根据不同目标拆解到不同team,各个team根据自己的目标喂特征进l2r
缺点:业务边界导致不同team对于搜索业务理解片面,很快进入瓶颈期,因为人工特征也有镜头,且一味喂特征进入,往往是换汤不换药,容易造成系统过早陷入瓶颈
深度学习:标注数据喂入NN模型,end to end解决问题
优点:结合深度学习泛化能力强的优点,通过大规模训练NN模型,帮助搜索彻底解决语义理解难题。
缺点:标注语料要求整体具有区分度,数据一旦有偏,整个模型就跪掉
编辑切换为居中
添加图片注释,不超过 140 字(可选)
1.需求侧:与搜索词分析交互,分析当前搜索词是否包含特殊要求(地域扩展、相关搜索)
2.调度侧:根据搜索词需求分析结果,调度下游(搜索中控、搜索广告、阿拉丁模块、知识图谱)
3.混排侧:合并结果(相关检索、特殊需求),进行去重、排序和调整,返回
4.提供纠错交互信息与相关检索词
1.调度:是否要查重 or 穿透小库去查大库
2.需求识别:配合查询词分析做需求识别,为检索查询和组合调序提供数据
3.在线特征统计
4.统一调权:以相关性为主干,叠加url级别的特征,进行队列内排序
5.组合调序:多队列结果做merge
6.风控:对merge结果进行屏蔽和升降权
7.整体控制和调度
编辑切换为居中
添加图片注释,不超过 140 字(可选)
编辑切换为居中
添加图片注释,不超过 140 字(可选)
-
漏斗中每个层按照时效性为多个库种:实时、小时、天级
-
每台服务器的承载能力有限,所以网页集合会分成shard存储,一次查询并行发给这些shard,在上有汇聚结果
-
搜索的查询流量到峰值的时候会比较大,一台服务器能装下一个shard,但却无法承担全部查询流量,因此可以针对每个shard复制出N个副本,每个副本承担对应shard的1/N的流量,同时副本之间还起到了容灾的作用
索引
编辑切换为居中
添加图片注释,不超过 140 字(可选)
编辑切换为居中
添加图片注释,不超过 140 字(可选)
网页的自身结构(url, title, content)以及anchor(前链)
逻辑上,网页可以分为多个field,url域,title域,anchor域,content域,将title与anchor打包统一叫做AT索引,title与content打包统一叫做CT索引
trunc中包含了更短的高权截断拉链,是从被截断的索引中筛选得到的,term和网页匹配得更好的倒排子集。
在建库的时候,会把term与网页的匹配划分为8档,6档以上是title/anchor精准命中;
5档是title命中或内容关键词;4档是一个分水岭,代表一个“模糊命中”2档以下是非常差的命中。高权拉链截断主要是效率和效果的平衡:
在计算资源有限,且已经召回了一些好结果的情况下,让召回过程提前终止。此处会有ACtrunc和CTtrunc两种索引
相对AT索引而言,CT索引中的content内容会更多,同一个term,CT拉链会比AT拉链更长,包含的offsets(term在网页中的位置信息)也会更多,这给召回带来很大的压力,
为了解决存储和计算双压力,CT拉链长度设定了一个上限:对于热门term,如果CT拉链的长度N超过一个阈值eta,就将匹配最好的eta个网页跳出,组成长度为eta的CT拉链;
剩下的N-eta网页,组成DIFF拉链
除去将anchor、content、title入索引之外,也会将clicked query做倒排拉链
如果线上系统没有挖掘到LOL是英雄联盟的缩写,有不少用户搜“LOL英雄联盟”点击了一个很好的游戏网站“game.tencent.com”,
该页面只包含了英雄联盟,不包含了LOL,且它的anchor中也没有LOL,这个时候可以考虑将game.tencent.com的构建入LOL的click query域,
未来其他用户输入LOL 攻略的时候,也可以将game.tencent.com召回,此外click query域还可以包含“点击次数”、“满意点击次数”等信号,
为网页和term的匹配提供了更丰富的特征
此外click query还兼有补充bigram的作用,可以更好的支持大粒度的检索,例如网页title “奥运会男单啥时候直播”,queryterm “男单直播”虽然不在title中,但在click query中
倒排索引是搜索中最核心的数据源,驱动搜索引擎在短时间内筛选一个小而准的候选网页集合
一条倒排拉链保存了对应term在当前的分域下,命中的所有网页的id,以及term在网页中的命中情况(匹配的weight,是否在title中,是否是网页关键词,是否是关键词的同义词),
这些信息会组织成64bits的结构体,一同放在倒排索引中;最后还需要保存term在网页中的命中频率和命中位置(offsets),用于query在网页中紧密度的计算
召回
AT查询 & CT查询,高级语法树,过滤结果,提前终止,省词,改写,粒度,预查询
编辑切换为居中
添加图片注释,不超过 140 字(可选)
基本功能
根据搜索中控请求检索页面拉链,归并各拉链,截断,基础特征计算
双层循环,时间复杂度O(N^2)
有序链表求交,两个指针分别指向两个链表的队首,如果相同,放入结果集,随意的移动一个指针,否则移动较小的指针,直到队尾,时间复杂度O(N)
分桶并行优化,对于链表通过分桶,将一个链表按照范围拆分成多个桶,然后采用多线程并行计算,最后做合并
采用跳表,时间复杂度O(logN)
AT & CT查询
编辑切换为居中
添加图片注释,不超过 140 字(可选)
原始query: 苏炳添亚洲记录 site: sports.sina.cn
多个SubQuery共同描述用户查询需求
多个QuerySyntax组成逆波兰式,描述不同SubQuery之间的关系
SubQuery包含at_query和ct_query,分别查询AT索引和CT索引. AT索引和CT索引是或的关系,如果一张网页同时被AT索引和CT索引召回,
将会取最好的命中返回,AT索引和CT索引一起查询主要是性能优化的原因,如果AT索引已经满足很好了,就没有必要费大力气去查CT索引了
编辑切换为居中
添加图片注释,不超过 140 字(可选)
编辑切换为居中
添加图片注释,不超过 140 字(可选)
高级语法树
编辑切换为居中
添加图片注释,不超过 140 字(可选)
奥运会赛程|奥林匹克运动会赛程-国乒赛程 site: sina.com
提前终止
通过减少树弹出的接过数,降低索引召回的cpu负载,减少响应时间,我们将其视为“有损”的性能优化,也叫做折中截断
原则
根据经验指定一些静态规则,对刚建完的树进行裁剪
在结果数或者好结果达到一定阈值后,开始减少召回(内在逻辑:系统已经有了令人满意的好结果,那么后面就可以少做一些工作)
做法
用轻量级的指标,预测一张网页的相关性得分,筛掉那些“没有希望进入topk的网页结果”,topk是信息检索领域的经典问题,如果能召回N个网页
理想状态,不需要省词的概念,命中了任何一个query的term的网页都应该被召回(高级语法那都是或)
从效率角度出发,过大的召回量给整个系统后端带来了非常大的压力&