营销客群规则引擎

用户画像系统标签数据持久化存储到MPP类型数据库,需要借助画像标签构建筛选查询。前端UI提供交互操作界面自由组合标签筛选条件,画像规则引擎基于组合设计模式生成树结构,通过树提供脚本生成规则校验,以及画像规则树条件节点通过策略模式生成数据库筛选SQL脚本,然后通过SQL脚本即可查询数据库获取数据。

用户画像标签涉及数值类型、文本类型、时间类型和级联类型条件自由组合,需要考虑实现扩展性和实现复杂度,不经过规范设计可能导致代码实现逻辑复杂,代码臃肿扩展性也就不言而喻。

一、实现方案

本次发明目的是使用委派设计模式打造一套用户画像规则生成方法,主要流程涉及前端UI交互、数据协议以及驱动引擎模块生成实现。

二、前端UI交互

如下图案例,前端UI交互通过"加条件"和"加条件组"按钮任意位置灵活组合筛选条件,根据与或非组装筛选逻辑内容。

"加条件"按钮只能追加当前层级筛选条件,比如"基础信息/注册日期"+相对日期+最近一周。"加条件组"可以其后追加一个与或非+至少2个条件的条件组,比如("基础信息/经营状态"+精确匹配 +在营)且("基础信息/常驻地"+匹配+广东省/广州市、广西省)。

三、数据协议

根据前端UI交互展示,通过树结构进一步抽象就如下图所示。根据树结构特性,树结构叶子节点不能包含子节点,规定树结构叶子结点为筛选条件节点。然而,树结构非叶子节点可以包含子节点,规定为与或非逻辑节点,定义为关系逻辑节点,可以看出关系逻辑节点可以包含任意关系逻辑节点和筛选条件节点。

前后端数据通过JSON格式数据进行交互,所以协议就按照JSON进行约定。通过树结构约定,筛选条件节点需要包含筛选条件标签信息、筛选条件逻辑和筛选条件内容。其次,为了减少前后端交互信息查询,添加额外字段进行前端回显。

json 复制代码
{
  "tagCode": "TAG1",     // 标签代码
  "tagName": "注册日期",  // 标签名字
  "tagType": "number",   // 标签类型
  "tagLogic": ["relative","last_near_day"],  // 筛选条件逻辑, 可以包含多个
  "tagValues": ["10"],        // 筛选条件
  "tagValueLabels": ["10"]    // 前端回显值
}

其次,根据约定与或非逻辑节点用于进行子条件组合,也是通过JSON进行约定。

json 复制代码
{
  "relationLogic": "or",   // 关系逻辑, 与(and), 或(or)
  "groups": []             // 条件组
}

因此,按照约定上面案例根据两种节点进行组合,数据协议内容如下。

json 复制代码
{
  "relationLogic": "or",
  "groups": [
    {
      "tagCode": "TAG1",
      "tagName": "注册日期",
      "tagType": "date", 
      "tagLogic": ["relative","last_near_day"],
      "tagValues": [], 
      "tagValueLabels": [] 
    },
    {
      "relationLogic": "and",
      "groups": [
        {
          "tagCode": "TAG2",
          "tagName": "经营状态",
          "tagType": "text", 
          "tagLogic": ["in"],
          "tagValues": ["在营"], 
          "tagValueLabels": ["在营"] 
        },
        {
          "tagCode": "TAG3",
          "tagName": "常驻地",
          "tagType": "region", 
          "tagLogic": ["in"],
          "tagValues": [
            {"level":1, values:["001000"]},
            {"level":2, values:["002001"]}
          ], 
          "tagValueLabels": [
            {"level":1, values:["广西省"]},
            {"level":2, values:["广州市"]}
          ]
        }
      ]
    }
  ]
}

四、画像规则引擎

前端UI交互实现筛选条件自由组合得到规定数据JSON结构,使用Ajax传递给画像规则引擎进行解析。画像规则引擎使用递归+循环解析树结构,使用组合设计模式构建规则树,然后基于规则树提供检查节点数据是否符合要求,以及基于规则树使用策略和委托模式生成查询脚本。

4.1 画像规则树构建

根据前端UI交互案例获取画像规则JSON协议数据,然后采用组合设计模式抽象规则树结构,通过画像规则驱动(PortaitRuleDriver)持有规则树(node)和数据维度(dims),关系逻辑节点通过组数组(groupNodes)持有多个子节点,筛选条件节点仅包含筛选条件信息。

那么,通过分析发现一个永恒公式:筛选条件SQL = select 维度 from 标签表 where 条件。维度可以通过addDim方法灵活添加,筛选条件通过Node节点生成,然后进行组装即可获得满足要求的少选SQL。

完成树结构形式定义,接下来解析JSON数据协议构建这棵规则树,构建流程主要使用递归+循环逻辑,主要流程如下。

4.2 规则树生成查询语句

通过画像规则JSON协议数据构建画像规则驱动,接下来需要通过画像规则驱动生成查询语句,首先调用规则树生成规则筛选条件,其次和用户客群标识进行组装生成查询语句。

4.3 生成筛选节点条件

筛选条件生成流程,主要包括数据类型转换和生成筛选条件,最终返回生成的筛选条件SQL

案例:注册日期+条件(相对时间,最近10天)

json 复制代码
{
  "tagCode": "TAG1",     // 标签代码
  "tagName": "注册日期",  // 标签名字
  "tagType": "date",      // 标签类型
  "tagLogic": ["relative","last_near_day"],  // 筛选条件逻辑, 可以包含多个
  "tagValues": ["10"],        // 筛选条件
  "tagValueLabels": ["10"]    // 前端回显值
}

首先,根据标签编码查询可以获取数据表字段,"tagCode"="TAG1"查询得到字段为reg_date字段 其次,根据筛选条件进行数据类型转换,如果当前时间为**2024-07-18**,那么"注册日期"根据"tagLogic"=["relative","last_near_day"]tagValues=["10"]内容即可生成['2024-07-08', '2024-07-18']条件数据。

最后,根据筛选条件关系进行筛选条件生成,也就是"注册日期"根据转换数据['2024-07-08', '2024-07-18']"tagLogic"=["relative","last_near_day"]生成SQL查询条件reg_date between '2024-07-08'and '2024-07-18'

五、总结与思考

根据需求与神策竞品内容可以清晰发现需要的演进方向,然后进行扩展性设计,满足业务灵活进行标签交并差操作。

专利链接:一种信息查询方法、系统、计算机设备和可读存储介质

相关推荐
小马爱打代码4 小时前
微服务外联Feign调用:第三方API调用的负载均衡与容灾实战
微服务·架构·负载均衡
9527华安8 小时前
FPGA实现40G网卡NIC,基于PCIE4C+40G/50G Ethernet subsystem架构,提供工程源码和技术支持
fpga开发·架构·网卡·ethernet·nic·40g·pcie4c
guojl13 小时前
深度解决大文件上传难题
架构
DemonAvenger13 小时前
Go语言中的TCP编程:基础实现与最佳实践
网络协议·架构·go
guojl14 小时前
一网打尽分布式锁
架构
xinxiangwangzhi_14 小时前
pytorch底层原理学习--PyTorch 架构梳理
人工智能·pytorch·架构
真实的菜16 小时前
Kafka生态整合深度解析:构建现代化数据架构的核心枢纽
架构·kafka·linq
Natsume171016 小时前
嵌入式开发:GPIO、UART、SPI、I2C 驱动开发详解与实战案例
c语言·驱动开发·stm32·嵌入式硬件·mcu·架构·github
DemonAvenger17 小时前
深入理解Go的网络I/O模型:优势、实践与踩坑经验
网络协议·架构·go