此博客用于个人学习,来源于网上,对知识点进行一个整理。
1. 广告检索服务功能的介绍:
前面针对我们的广告检索服务,我们进行了全量索引和增量索引的设计与实现,接下来就是对于广告检索系统的功能进行一个介绍。
广告检索服务是我们广告检索系统中最重要的服务功能,它能实现根据媒体方的请求信息返回对应的广告数据。我们比较常见的媒体方,比如地铁里面的通道大屏,手机的屏幕里打开的一些 APP,里面会展示一些广告,这些广告载体就被称为媒体方。它们是用来播放这些广告创意的。媒体方会向我们的检索系统发起请求,这个请求实际上是非常复杂的,里面包含非常多详细的信息。首先,按细来分,可以将请求信息分为三个类型:
- 媒体方标识 mediaId:需要在我们的平台先定义,所以我们的平台通常有媒体方的标识。媒体方的标识就是告诉我们是哪个媒体方发起的广告检索请求。
- 请求基本信息:这个就是对媒体方自身的描述信息及对广告位的描述信息,我们对基本信息做拆分:
- 唯一请求 id:每一次请求,都会要求媒体方去发送一个请求 id,方便我们做后续的校验,通过一个 id 确定是唯一的一次广告请求。
- 广告位信息:包含广告位的编码,能够通过这个编码找到唯一的广告位;广告位的宽,高,广告位的信息。
- 终端信息:也被称为应用信息,因为对于媒体方来说,不管它是通过通道大屏还是手机屏幕,实际上发起请求是某个应用,是一个 APP。应用里面有一项代码,对应我们的广告检索系统发起请求,我们需要得知是哪个应用发起的请求就需要终端的信息,比如应用的编码,应用的名字。
- 地域信息:当前媒体方的地域信息,比如经度,维度,城市,省份等等。
- 设备信息:也是用来标识设备的信息,比如设备的 ip,设备的 mac,屏幕的编码,设备的尺寸等等,作为广告数据打印日志,同样也是可以和媒体方进行核对。
- 请求匹配信息:是广告数据的决定性因素,向我们的检索系统发起请求需要带一些限制,比如我需要什么信息,不要什么信息。我们根据推广单元设置了三类限制——关键词限制,地域限制,兴趣限制。对于请求匹配信息,其中包含一个关系 AND/OR,前者是媒体方提供的匹配信息都要完全包含所有限制才会通过这个检索;后者是提供了很多匹配信息,但只有其中一两中符合也可以。
检索系统的响应过程就是匹配与过滤过程,首先去初始化“筛选”这些推广单元,也就是我们的广告位,然后再去对各个限制维度进行过滤。之后再根据推广单元和推广计划的状态进行过滤,最后根据广告位信息进行创意的过滤。
总结来讲,检索系统就是不断的对媒体方的请求条件进行一个过滤筛选的过程,最终会返回符合媒体方要求的一些返回类型数据,进行响应。
2. 媒体方请求对象的定义:
根据前面的描述,媒体方请求对象包含——媒体方标识,请求基本信息和请求匹配信息,其中请求基本信息包含,唯一的请求 id,广告位的信息,终端信息,地域信息和设备信息,请求匹配信息包含关键字限制,地域限制和兴趣限制。考虑到这两种数据类型比较复杂,我们先构建它们的子对象。
2.1 构建请求基本信息的子对象:
广告位信息:
/**
* 广告位信息
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class AdSlot {
// 广告位编码
private String adSlotCode;
// 流量类型
private Integer positionType;
// 宽和高
private Integer width;
private Integer height;
// 广告物料类型: 图片, 视频
private List<Integer> type;
// 最低出价
private Integer minCpm;
}
终端信息:
/**
* App终端信息
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class App {
// 应用编码
private String appCode;
// 应用名称
private String appName;
// 应用包名
private String packageName;
// activity 名称
private String activityName;
}
地域信息:
/**
* 地域信息
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Geo {
//纬度
private Float latitude;
//经度
private Float longitude;
//城市
private String city;
//省份
private String province;
}
设备信息:
/**
* 设备信息
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Device {
// 设备 id
private String deviceCode;
// mac
private String mac;
// ip
private String ip;
// 机型编码
private String model;
// 分辨率尺寸
private String displaySize;
// 屏幕尺寸
private String screenSize;
// 设备序列号
private String serialName;
}
2.2 构建请求匹配信息的子对象:
关键字限制:
/**
* 关键词
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class KeywordFeature {
private List<String> keywords;
}
地域限制:
/**
* 地域
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class DistrictFeature {
private List<ProvinceAndCity> districts;
@Data
@NoArgsConstructor
@AllArgsConstructor
public static class ProvinceAndCity {
private String province;
private String city;
}
}
兴趣限制:
/**
* 兴趣
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ItFeature {
private List<String> its;
}
各限制条件的关系:
public enum FeatureRelation {
OR,
AND
}
2.3 请求对象的构建:
@Data
@NoArgsConstructor