以下是搜索推广中倒排检索、PforDelta 和 NewPforDelta 的介绍:
倒排检索是一种在搜索推广中用于快速查找和定位相关信息的数据结构和检索技术。它主要由词典和倒排列表两部分构成。词典包含所有关键词且通常按字典序排序,每个关键词有唯一标识。倒排列表记录每个关键词在哪些文件中出现、出现位置及频次等信息。
当用户输入查询请求,搜索引擎会先分词,再在词典中查找关键词标识,接着获取对应倒排列表并合并,计算文件与查询请求的相关性得分,最后按得分排序返回文件。例如在电商搜索中,用户搜 “运动鞋”,倒排检索能迅速找到包含该关键词的商品信息,还可依用户画像和购买记录等,精准推荐相关运动鞋商品。
PforDelta 是一种用于倒排索引数据压缩的算法。在倒排索引中,像 docid、词频、词位置等数据会占用大量磁盘空间,需要压缩。
PforDelta 算法首先对按顺序从小到大排列的数据(如 docid)进行 Delta 编码,即保存相邻元素差值,对于非递增排列的词频和词位置等则无此操作,此时称为 PFor 算法。完成 Delta 编码后的数据被拆分成多个固定大小的 block(如每个 block 存储 128 个数据),然后分别对每个 block 独立压缩和解压。
该算法的基础思想是,对于一个 block,认为大部分数据只需较小空间存储,将其作为正常部分,剩下小部分(小于 10%)作为异常数据单独存储。通过设定一个值 framebit,使超过 90% 的数据能用 framebit 位存储。解压时先提取正常部分,再根据异常部分信息将异常值填入相应位置。
NewPforDelta 是 PforDelta 算法的改进版本。针对 PforDelta 算法中异常数据间隔可能超过 framebit 位能存储最大值的问题,NewPforDelta 算法以 128 个数据为 block 大小时,将异常值间隔单独拿出存储,原来存储间隔大小的位置用来存储异常值的低位,异常值的高位则和间隔一起存储在异常部分。
此外,异常部分每个值一般不大,可用其他压缩算法(如 s9 算法)继续压缩。NewPforDelta 算法设计原则是 CPU 流水线友好,以实现压缩率好的情况下解压效率也很优秀的目标,并且可使用 SIMD 技术对正常部分解压进行优化,以进一步提升解压效率。