签检索:合理使用标签过滤和划分索引空间

简介: 广告引擎通过标签优化索引设计:高区分度标签用于倒排索引,低区分度的加入过滤列表,高覆盖维度则用于索引分片。结合树形结构分流、倒排检索与结果过滤,有效缩小检索空间,提升匹配效率。(239字)

广告引擎的索引设计思路,是将广告设置的标签作为 Key 来构建倒排索引,在 posting list 中记录对应的广告设置列表,然后为标签进行 ID 编号,让系统处理标签的过程能更高效。这么说比较抽象,我来举个例子。

如果广告设置的标签是「地域:北京」「兴趣:篮球」「媒体:体育网站」,那我们可以使用一个 32 位的整数为每个标签进行编号。具体来说就是将 32 位的整数分为两部分,高位用来表示定向类型,低位用来表示这个定向类型下具体的标签。

比如说,我们采用高 8 位作为定向类型的编码,用来表示地域定向、兴趣定向和媒体定向等。用低 24 位,则作为这个定向类型下面的具体内容。那在地域定向里,低 24 位就是每个地区或者城市自己的编码。这样,我们就可以将广告设置的标签都转为一个编号了(高、低位的分配是可以根据实际需求灵活调整的)。

  1. 将标签加入过滤列表

那是不是所有的标签都可以作为倒排索引的 Key 呢?你可以先自己想一想,我们先来看一个例子。

如果所有的广告投放设置都选择投放在 App 上,那么「媒体类型:App」这个标签后面的 posting list 就保存了所有的广告设置。但是,这样的标签并不能将广告设置区分开。为了解决这个问题,我们可以使用类似 TF-IDF 算法中计算 IDF 的方式,找出区分度低的标签,不将它们加入倒排索引。

那我们什么时候使用这些标签呢?我们可以将这些标签加入「过滤列表」中,然后在倒排索引中检索出结果以后,加上一个过滤环节,也就是对检索结果进行遍历,在遍历过程中使用「过滤列表」中的标签进行检查,这样就完成了标签是否匹配的判断。

  1. 用标签进行索引分片

其实,对于标签的匹配使用,我们还有其他的方案。我们再来看一个例子,假设平台中有一半的广告投放设置希望投放在移动 App 上,另一半希望投放在 PC 网站上,那如果我们以「媒体类型:App」和「媒体类型:PC 网站」作为标签来建立倒排索引的话,这样的标签是有区分度的。但是由于这两个标签后面的 posting list 都会非常长,各自都保存着一半的广告设置。因此在进行 posting list 归并的时候,实际上就等于要遍历一半的广告设置。这反而会降低检索效率。

因此,对于「媒体类型」这类(以及「性别」、「操作系统」等)具有少量的标签值,但是每个标签值都有大规模区分度的设置维度来说,我们可以不把它们加入到倒排索引中,而是根据标签来将广告设置进行 分片。也就是把投放 PC 网站的广告设置作为一组,投放 App 的广告设置作为另外一组,分别建立倒排索引。

如果这样的有区分度的设置维度不止一个,那我们就使用树形结构进行划分,将最有区分度的设置维度(如「媒体类型」)作为根节点,不同的设置值作为分叉(如 PC 网站和 App 就是「媒体类型」维度下的两个分叉)。在这个节点下,如果有其他的设置也具有足够的区分度,那也可以作为子节点继续划分。然后对于被划分到同一个叶子节点下的一组,我们再利用标签建立倒排索引。

通过这样的树形结构,我们根据广告请求上的标签,就能快速定位到要找的索引分片,之后,再查找分片中的倒排索引就可以了。

总结来说,广告设置对广告引擎来说,就像搜索词对搜索引擎一样重要。但是对于广告设置,我们不会像关键词一样,全部加入倒排索引中,而是会分别加入到三个环节中:第一个环节,作为树形结构的节点分叉进行分流;第二个环节,作为倒排索引的 Key;第三个环节,在遍历候选结果时作为过滤条件。通过这样的设计,广告引擎中的检索空间就能被快速降低,从而提升检索效率,快速返回候选结果了。

相关文章
|
2月前
|
搜索推荐 数据库 索引
广告引擎的整体架构和工作过程
广告引擎核心是匹配用户与广告。通过用户标签、广告位信息及广告主定向条件,构建倒排索引,实现高效召回与排序,0.1秒内完成广告返回,并实时监测展现、点击与计费,确保精准投放与预算控制。
|
2月前
|
存储
如何利用批量写入代替多次随机写入?
LSM树通过延迟写入优化磁盘I/O:数据先写入内存中的C0树,达到阈值后批量以块为单位写入磁盘的C1树。C1树采用B+树结构且叶子节点全满,无需预留空间,提升写入效率,适用于高并发写场景。(239字符)
|
存储 安全 Linux
Android安全启动学习(四):device-mapper-verity (dm-verity)和哈希树
Android安全启动学习(四):device-mapper-verity (dm-verity)和哈希树
1012 0
|
2月前
|
编解码 算法 前端开发
java后端开发学习路线+避坑指南
java后端开发学习路线+避坑指南
|
2月前
|
监控 Java C语言
揭开 Java 容器“消失的内存”之谜:云监控 2.0 SysOM 诊断实践
本文介绍云原生环境下Java应用内存超限问题的诊断与治理,聚焦容器化后常见的JVM堆外内存、JNI内存泄漏、LIBC分配器特性及Linux透明大页等导致OOM的根源,结合阿里云SysOM系统诊断工具,通过真实案例详解如何实现从应用到系统的全链路内存分析,精准定位“消失的内存”,提升资源利用率与稳定性。
175 19
|
2月前
|
存储 SQL 人工智能
Windows Server 2025 中文版、英文版下载 (2025 年 12 月更新)
Windows Server 2025 LTSC x64 (updated Dec 2025)
477 1
|
2月前
|
存储 API 网络安全
vCenter Server 8.0U3h 新增功能简介
VMware vCenter Server 8.0U3h 发布 - 集中管理 vSphere 环境
173 0
vCenter Server 8.0U3h 新增功能简介
|
2月前
|
数据采集 存储 机器学习/深度学习
搜索引擎的整体架构和工作过程
搜索引擎由爬虫、索引和检索三大系统构成:爬虫负责抓取网页并存储;索引系统对网页去重、分析并构建倒排索引;检索系统通过查询分析、相关性排序等技术,返回精准结果。全过程融合文本分析、机器学习与大规模计算,确保高效准确搜索。
|
2月前
|
存储
多叉树的递归/层序遍历
多叉树是二叉树的扩展,每个节点可有多个子节点。遍历方式与二叉树类似:递归遍历(DFS)无中序概念;层序遍历(BFS)用队列实现,三种写法分别用于基础遍历、记录深度和处理加权边。结构差异仅在于子节点存储形式。
|
2月前
|
人工智能
当“好故事”必须变成“好画面”,集之互动用AI创意视频服务让品牌创意更容易被看见
集之互动推出AI创意视频服务,以大模型赋能创意生成,结合专业导演与后期团队,打通从灵感到成片的全链路。助力品牌突破预算、周期与制作瓶颈,将碎片化创意转化为可复制、可延展的视听内容生态,让好故事真正“看得见、走得远、活得久”。
86 0