精华内容
下载资源
问答
  • 标签系统

    千次阅读 2018-08-16 11:25:25
    1、系统增加两类标签 身份标签: • 身份标签为拿手的的用户属性,用于描述拿手的自身的特性,具体如下: • 时尚潮人 • 数码极客 • 文艺青年 • 运动达人 • 无敌辣妈 • 御宅一族 兴趣标签: • 兴趣...

    一、增加拿手的兴趣标签和身份标签,用于后续商家增值服务使用,同时建立基础的用户画像。

    1、系统增加两类标签

    • 身份标签:
      • 身份标签为拿手的的用户属性,用于描述拿手的自身的特性,具体如下:
      • 时尚潮人
      • 数码极客
      • 文艺青年
      • 运动达人
      • 无敌辣妈
      • 御宅一族

    • 兴趣标签:
      • 兴趣标签为淘宝的宝贝类目,用于了解拿手在淘宝上的消费习惯,具体标签内容如下:
      • 服装鞋包
      • 手机数码
      • 家用电器
      • 美妆饰品
      • 母婴用品
      • 家居建材
      • 百货食品
      • 运动户外
      • 文化玩乐
      • 生活服务
      • 汽配摩托

    2、拿手手机端增加打标签的页面
    • 拿手手机端新增两个页面,用于拿手身份标签和兴趣标签的选择,界面原型如下,设计稿界面待更新;
    • 在设定标签的过程中,有可能会发生返回的操作,所以在最后点击“开启我的白拿拿之旅”时,进行保存的操作
    这里写图片描述

    3、标签页面触发入口

    • 新注册用户:
      对于新注册的用户,完成注册或者绑定手机号完成后,直接进入上述的标签原则页,且拿手必须完成标签的选择后,才可进入到首页;
    • 老用户
      对于已注册的用户,在返回的首页的时候(包括点击分享的链接、公众号底部菜单、其它页面返回首页等),如果未设定过身份标签和兴趣标签,则直接进入标签设定页,设定完成后才可以进入到首页;

    4、保存设定的信息到拿手的标签中
    • 拿手设定完成后,保存对应的身份标签和兴趣标签到该拿手的标签信息中,同时后台标签管理中,需要增加该拿手对应标签的展示

    这里写图片描述

    二、系统设计:

    1、标签配置表:
    实体类:

    
    package com.zhibi.xiuba.user.spi.model;
    
    import org.hibernate.annotations.GenericGenerator;
    import org.hibernate.annotations.Type;
    
    import javax.persistence.*;
    import java.io.Serializable;
    import java.util.Date;
    
    /**
     * Created by QinHe on 2018-05-08.
     * 底层标签配置
     */
    @Entity
    @Table(name = "xb_us_tag_config")
    public class TagConfig implements Serializable {
        private static final long serialVersionUID = -845329773606157910L;
    
        @Id
        @GeneratedValue(generator = "id_generator")
        @GenericGenerator(name = "id_generator", strategy = "redis_id")
        private Long id;
    
        /**
         * 父标签
         */
        @ManyToOne()
        @JoinColumn(updatable = false, name = "parent_id", referencedColumnName = "id")
        private TagConfig parent;
    
        /**
         * 标签层级 0为最顶层
         */
        private Integer level;
    
        /**
         * 用于排序
         */
        private Integer sortIndex;
    
        /**
         * 标签名字
         */
        private String name;
    
        /**
         * 标签描述
         */
        private String description;
    
        /**
         * 当下是否可用
         */
        @Type(type = "org.hibernate.type.NumericBooleanType")
        private Boolean enabled;
    
        private String dataType;
    
        private String iconUrl;
    
        private Date createTime;
    
        private Date updateTime;
    
        private Date deadLineTime;
    
        public Long getId() {
            return id;
        }
    
        public void setId(Long id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Boolean getEnabled() {
            return enabled;
        }
    
        public void setEnabled(Boolean enabled) {
            this.enabled = enabled;
        }
    
        public String getDataType() {
            return dataType;
        }
    
        public void setDataType(String dataType) {
            this.dataType = dataType;
        }
    
        public Date getCreateTime() {
            return createTime;
        }
    
        public void setCreateTime(Date createTime) {
            this.createTime = createTime;
        }
    
        public Date getUpdateTime() {
            return updateTime;
        }
    
        public void setUpdateTime(Date updateTime) {
            this.updateTime = updateTime;
        }
    
        public Date getDeadLineTime() {
            return deadLineTime;
        }
    
        public void setDeadLineTime(Date deadLineTime) {
            this.deadLineTime = deadLineTime;
        }
    
        public String getDescription() {
            return description;
        }
    
        public void setDescription(String description) {
            this.description = description;
        }
    
        public TagConfig getParent() {
            return parent;
        }
    
        public void setParent(TagConfig parent) {
            this.parent = parent;
        }
    
        public Integer getLevel() {
            return level;
        }
    
        public void setLevel(Integer level) {
            this.level = level;
        }
    
        public Integer getSortIndex() {
            return sortIndex;
        }
    
        public void setSortIndex(Integer sortIndex) {
            this.sortIndex = sortIndex;
        }
    
        public String getIconUrl() {
            return iconUrl;
        }
    
        public void setIconUrl(String iconUrl) {
            this.iconUrl = iconUrl;
        }
    }
    

    这里写图片描述

    标签是分级的,这里面是用parent一个字段就可以表示层级关系了

    2、用户标签对应表

    实体类:

    package com.zhibi.xiuba.user.spi.model;
    
    import com.zhibi.xiuba.user.spi.enums.DataTypeEnum;
    import com.zhibi.xiuba.utils.StringUtils;
    import org.hibernate.annotations.GenericGenerator;
    import org.hibernate.annotations.Type;
    
    import javax.persistence.*;
    import java.io.Serializable;
    import java.util.Date;
    
    /**
     * Created by QinHe on 2018-05-08.
     * 增值业务配置类
     */
    @Entity
    @Table(name = "xb_us_tag_library")
    public class TagLibrary implements Serializable {
        private static final long serialVersionUID = -4645714347119745836L;
    
        @Id
        @GeneratedValue(generator = "id_generator")
        @GenericGenerator(name = "id_generator", strategy = "redis_id")
        private Long id;
    
        /**
         * 标签 多对一
         */
        @ManyToOne
        @JoinColumn(nullable = false, updatable = false, name = "tag_config_id", referencedColumnName = "id")
        private TagConfig tagConfig;
    
        /**
         * 用户id
         */
        private Long userId;
    
        private String stringValue;
    
        private Date dateValue;
    
        private Long longValue;
    
        @Column(columnDefinition = "bit", length = 1)
        @Type(type = "org.hibernate.type.NumericBooleanType")
        private Boolean booleanValue;
    
        private Double doubleValue;
    
    
        private Date createTime;
    
        private Date updateTime;
    
        public TagLibrary() {
        }
    
        public TagLibrary(TagConfig tagConfig, Long userId, Date createTime) {
            this.tagConfig = tagConfig;
            this.userId = userId;
            this.createTime = createTime;
        }
    
        public void setValue(Object value, String dataType) {
            if (value != null && StringUtils.isNoneBlank(dataType)) {
                if (DataTypeEnum.DATA_TYPE_ENUM_STRING.getCode().equals(dataType)) {
                    this.stringValue = (String) value;
                }
                if (DataTypeEnum.DATA_TYPE_ENUM_DATE.getCode().equals(dataType)) {
                    this.dateValue = (Date) value;
                }
                if (DataTypeEnum.DATA_TYPE_ENUM_LONG.getCode().equals(dataType)) {
                    this.longValue = (Long) value;
                }
                if (DataTypeEnum.DATA_TYPE_ENUM_BOOLEAN.getCode().equals(dataType)) {
                    this.booleanValue = (Boolean) value;
                }
                if (DataTypeEnum.DATA_TYPE_ENUM_DOUBLE.getCode().equals(dataType)) {
                    this.doubleValue = (Double) value;
                }
            }
            this.stringValue = value.toString();
            this.updateTime = new Date();
        }
    
        public Long getId() {
            return id;
        }
    
        public void setId(Long id) {
            this.id = id;
        }
    
        public TagConfig getTagConfig() {
            return tagConfig;
        }
    
        public void setTagConfig(TagConfig tagConfig) {
            this.tagConfig = tagConfig;
        }
    
        public Long getUserId() {
            return userId;
        }
    
        public void setUserId(Long userId) {
            this.userId = userId;
        }
    
        public String getStringValue() {
            return stringValue;
        }
    
        public void setStringValue(String stringValue) {
            this.stringValue = stringValue;
        }
    
        public Date getDateValue() {
            return dateValue;
        }
    
        public void setDateValue(Date dateValue) {
            this.dateValue = dateValue;
        }
    
        public Long getLongValue() {
            return longValue;
        }
    
        public void setLongValue(Long longValue) {
            this.longValue = longValue;
        }
    
        public Boolean getBooleanValue() {
            return booleanValue;
        }
    
        public void setBooleanValue(Boolean booleanValue) {
            this.booleanValue = booleanValue;
        }
    
        public Double getDoubleValue() {
            return doubleValue;
        }
    
        public void setDoubleValue(Double doubleValue) {
            this.doubleValue = doubleValue;
        }
    
        public Date getCreateTime() {
            return createTime;
        }
    
        public void setCreateTime(Date createTime) {
            this.createTime = createTime;
        }
    
        public Date getUpdateTime() {
            return updateTime;
        }
    
        public void setUpdateTime(Date updateTime) {
            this.updateTime = updateTime;
        }
    }
    

    这里写图片描述

    3、controller方法

    package com.zhibi.xiuba.controller;
    
    import com.alibaba.fastjson.JSON;
    import com.zhibi.xiuba.model.ControllerResult;
    import com.zhibi.xiuba.service.ITagService;
    import com.zhibi.xiuba.user.spi.enums.TagConfigIdEnum;
    import com.zhibi.xiuba.user.spi.model.TagConfig;
    import lombok.extern.slf4j.Slf4j;
    import org.apache.commons.lang3.StringUtils;
    import org.springframework.web.bind.annotation.*;
    
    import java.util.List;
    
    @Slf4j
    @RestController
    @RequestMapping("/user/tag/")
    public class TagController {
    
        private final ITagService tagService;
    
        public TagController(ITagService tagService) {
            this.tagService = tagService;
        }
    
        @PostMapping("/makeTagForShowker")
        @ResponseBody
        public ControllerResult makeTagForShowker(@RequestParam Long showkerId,
                                                  @RequestParam String identityTagJsonStr,
                                                  @RequestParam String hobbyTagJsonStr) {
    
    
            List<Long> idsIdentity = tagService.findByUserIdAndTagParent(showkerId, TagConfigIdEnum.IDENTITY_TAG_ID.getCode());
            List<Long> idsHobby = tagService.findByUserIdAndTagParent(showkerId, TagConfigIdEnum.HOBBY_TAG_ID.getCode());
            if ((idsIdentity != null && idsIdentity.size() > 0) || (idsHobby != null && idsHobby.size() > 0)) {
                return ControllerResult.build(false, "", "您已经打过标签了!");
            }
    
            if (StringUtils.isNotBlank(identityTagJsonStr)) {
                List<Long> tagIds = JSON.parseArray(identityTagJsonStr, Long.class);
                if (tagIds != null) {
                    if (tagIds.size() > 2) {
                        return ControllerResult.build(false, "", "最多可选两项!");
                    }
                    for (Long tagId : tagIds) {
                        tagService.createTagForUser(showkerId, tagId);
                    }
                }
            }
    
            if (StringUtils.isNotBlank(hobbyTagJsonStr)) {
                List<Long> tagIds = JSON.parseArray(hobbyTagJsonStr, Long.class);
                if (tagIds != null) {
                    if (tagIds.size() > 4) {
                        return ControllerResult.build(false, "", "最多可选四项!");
                    }
                    for (Long tagId : tagIds) {
                        tagService.createTagForUser(showkerId, tagId);
                    }
                }
    
            }
            return ControllerResult.ok();
        }
    
        @GetMapping("/getIdentityTag")
        @ResponseBody
        public ControllerResult getIdentityTag(Long categoryId, Boolean enable) {
            List<TagConfig> list = tagService.getIdentityTag(categoryId, enable);
            return ControllerResult.ok(list);
        }
    
    }

    4、业务逻辑层

    package com.zhibi.xiuba.service.impl;
    
    import com.zhibi.xiuba.repository.TagConfigRepository;
    import com.zhibi.xiuba.repository.TagLibraryRepository;
    import com.zhibi.xiuba.service.ITagService;
    import com.zhibi.xiuba.user.spi.model.TagConfig;
    import com.zhibi.xiuba.user.spi.model.TagLibrary;
    import org.springframework.cache.annotation.Cacheable;
    import org.springframework.data.domain.Example;
    import org.springframework.stereotype.Service;
    
    import java.util.Date;
    import java.util.List;
    
    /**
     * Created by QinHe on 2018-07-02.
     */
    @Service
    public class TagService implements ITagService {
    
        private final TagLibraryRepository tagLibraryRepository;
        private final TagConfigRepository tagConfigRepository;
    
    
        public TagService(TagLibraryRepository tagLibraryRepository, TagConfigRepository tagConfigRepository) {
            this.tagLibraryRepository = tagLibraryRepository;
            this.tagConfigRepository = tagConfigRepository;
        }
    
        @Override
        public List<Long> findByUserIdAndTagParent(Long userId, Long tagParentId) {
            return tagLibraryRepository.findByUserIdAndTagParent(userId, tagParentId);
        }
    
        @Override
        @Cacheable(cacheNames = "Tag", key = "'categoryId_' + #categoryId+'_'+#enable")
        public List<TagConfig> getIdentityTag(Long categoryId, Boolean enable) {
            TagConfig tagConfig = new TagConfig();
            TagConfig parent = new TagConfig();
            parent.setId(categoryId);
            tagConfig.setParent(parent);
            if (enable != null) {
                tagConfig.setEnabled(enable);
            }
            return tagConfigRepository.findAll(Example.of(tagConfig));
        }
    
        @Override
        public void createTagForUser(Long showkerId, Long tagId) {
            TagLibrary tagLibrary = new TagLibrary();
            tagLibrary.setCreateTime(new Date());
            tagLibrary.setUserId(showkerId);
            tagLibrary.setTagConfig(tagConfigRepository.findOne(tagId));
            tagLibraryRepository.save(tagLibrary);
        }
    }
    
    展开全文
  • 如何设计标签系统

    千次阅读 2017-04-24 16:43:00
    今天在微信群里看见一道题: ...我回答:先将标签系统分为3个子标签系统(即书的标签/分类,用户评论,用户),书的标签系统可能得需要人工标记它的属性/类别,用户评论标签可以用语义识别提取标签的属性,用户

    今天在微信群里看见一道题:


    某某:出一道系统设计题: 如何设计标签系统 。假设有一个电子书销售网站 我们现在需要给它设计标签系统 书是有标签的 用户的评论是有标签的 用户也是有标签的 希望这些标签是统一的。


    我回答:先将标签系统分为3个子标签系统(即书的标签/分类,用户评论,用户),书的标签系统可能得需要人工标记它的属性/类别,用户评论标签可以用语义识别提取标签的属性,用户标签采用机器学习算法得出用户画像以及特征,然后3个子标签系统融合为一个high level的标签系统(猜想利用特征融合方法,我没研究过,不太了解具体= =)。除此之外,可能需要考虑到用户隐私保护、方便推荐系统设计。

    展开全文
  • 关于标签系统的一点想法。

    万次阅读 2015-04-13 14:06:08
    我跟几个人谈到过我这个标签系统标签系统,tagging,在 web 2.0 时代大行其道,特别是 del.icio.us 大量应用而广受关注。但如今,随着 del.icio.us 的消逝鲜有人关注了。但,标签系统是一个极具扩展力的系统,作为...

    我跟几个人谈到过我这个标签系统。

    标签系统,tagging,在 web 2.0 时代大行其道,特别是 del.icio.us 大量应用而广受关注。但如今,随着 del.icio.us 的消逝鲜有人关注了。

    但,标签系统是一个极具扩展力的系统,作为一种“元数据”信息,可应用的场景其实非常多样化。因为开展了开发外包业务,接触了几个需求以后,愈加觉得如此。比如有如下需求:

    有一个订餐系统,类似“饿了么”,店家增加菜品麻婆豆腐,希望它加入“周二半价”活动,后来活动又多了一个“满10减1”。考虑到活动可能常常增加、变动,那么如何设计方案?

    也许你不信,其实 tagging 可以很好地解决这一类问题,额,确切来说是加上装修器模式。

    当界面显示某一菜品时,显示的信息其实与从数据库中取得的初始数据不同,比如对于每一道菜:

    tag_decorators = [...] #init tag decorators
    
    def tuesday_promote(menu_item):
      if menu_item.has_tag('周二半价') and today_is_tuesday():
        menu_item.price *= 0.5
    
    tag_decorators.append(tuesday_promote)
    
    menu = get_menu_from_db(...)
    for item in menu:
      for deco in tag_decorators:
        deco(item)
    
    render_html(menu)

    如上可见,当“麻婆豆腐”遇上星期二时,它的价格就会打五折。相对于给每一个菜品表增加一个“周二半价”的字段,使用 tagging 让整个系统更加简洁。

    在实现时,每一个 tag 和它所对应的 decorator 完全可以存储在数据库中,在后台新增加一个 tag 时,可以绑定相对应的 decorator,甚至 decorator 的某些参数,就可以实现不需要编程即可变更业务逻辑的目的。

    在真正的业务代码中,肯定不会出现 menu_item.price *= 0.5 这种代码,每一个 decorator 的作用都要记录下来,应该会把 menu_item 作一个包装。

    另外,把 decorator 放在数据读取层中会更加好,这样业务层的代码可以把标签系统当透明,程序员写起代码来完全没有心智负担。

    展开全文
  • 标签系统1.1 基础标签1.1.1、概览:基础标签1.1.2、新建:主分类标签1.1.3、新建:业务标签1.1.4、存储:标签数据1.1.5、新建:5级标签1.1.6、总述:新建标签1.2、组合标签1.3、微观画像1.4、标签查询小结 ...

            在前面几篇博客中,博主已经为大家带来了什么是用户画像,以及项目的一个基础介绍。用户画像的核心就是打标签,本篇博客,我们来聊聊关于这个项目的标签系统。
    在这里插入图片描述


    1. 标签系统

    1.1 基础标签

    1.1.1、概览:基础标签

            启动WEB 项目后,浏览器登录,默认账号与密码,点击【登录】即可,下图所示:
    在这里插入图片描述
            进入系统后,直接显示【基础标签】页面,重要功能如下所示:

    在这里插入图片描述
            上述所表述的5个按钮,主要构建标签、查看标签和编辑标签,具体说明如下:

        1、基础标签 Tag页
        
        2、基础标签 分类
        	按照标签体系划分标签为4级、5级标签
        	- 4级标签:业务标签
        	- 5级标签:业务标签对应的值(属性标签)
        
        3、新建主分类标签
        	1级、2级、3级分类标签
        	
        4、创建业务标签
        	具体业务标签,其中有很多相关设置,关于标签如何构建(读取数据源、运行Spark程序及调度策略)
        	
        5、针对业务标签操作
        	- 启动:业务标签运行程序生成标签
        	- 编辑:修改业务标签属性
        	- 删除:将业务标签删除
    

    1.1.2、新建:主分类标签

            用户画像构建时,标签按照等级划分,大致如下所示:
    在这里插入图片描述
            在WEB界面上,点击左下角【新建主分类标签】按钮,即可新建1级、2级和3级标签:
    在这里插入图片描述
             但是如果要删除1级、2级和3级标签,必须到后台数据库删除。

    1.1.3、新建:业务标签

            新建某个业务标签(实际开发标签,编写Spark 应用程序),截图选项如下:

    在这里插入图片描述
            具体参数说明如下(以新建【年龄段】业务标签为例):

    1、标签名称:年龄段
    	
    2、标签分类:商城-某商城-人口属性
    	业务标签属于4级标签,所以分类时指定所属3级标签
    
    3、更新周期:每天#2019-08-01 01:00#2029-08-01 01:00
    	多久执行一次Spark任务
    	
    4、业务含义:注册用户的生日所属年龄段
    	业务标签含义说明
    
    5、标签规则:Key=Value形式,按照换行符分割
        inType=hbase
        zkHosts=192.168.10.20
        zkPort=2181
        hbaseTable=tbl_users
        family=info
        selectFieldNames=id,gender
        
    6、程序入口:cn.itcast.tag.commons.models.pub.business.AgeRangeModel
    	Spark Application程序的全名称
    
    7、算法名称:Statistics
    	业务标签计算模型类型:统计-Statistics、规则匹配-Match、挖掘-具体算法-DecisionTree、KMeans
    	
    8、算法引擎:/apps/tags/models/tag_9/lib/tags-20190703231621.jar
    	Spark应用程序JAR包,通过页面选择jar包,上传到HDFs目录中
    
    9、模型参数:Spark 应用程序执行资源参数设置
    	--deploy-mode cluster --driver-memory 2G --executor-memory 4G --num-executors 5 --executor-cores 2
    

    1.1.4、存储:标签数据

            上述新建的标签数据存储MySQL数据库中,对应两张表存储数据,分别为标签表:tbl_basic_tag模型表:tbl_model,具体说明如下:

    • 标签表:tbl_basic_tag,存储标签的基本信息,属于基础标签
    CREATE TABLE `tbl_basic_tag` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '标签ID',
      `name` varchar(50) DEFAULT NULL COMMENT '标签名称',
      `industry` varchar(30) DEFAULT NULL COMMENT '行业、子行业、业务类型、标签、属性',
      `rule` varchar(300) DEFAULT NULL COMMENT '标签规则',
      `business` varchar(100) DEFAULT NULL COMMENT '业务描述',
      `level` int(11) DEFAULT NULL COMMENT '标签等级',
      `pid` bigint(20) DEFAULT NULL COMMENT '父标签ID',
      `ctime` datetime DEFAULT NULL COMMENT '创建时间',
      `utime` datetime DEFAULT NULL COMMENT '修改时间',
      `state` int(11) DEFAULT NULL COMMENT '状态:1申请中、2开发中、3开发完成、4已上线、5已下线、6已禁用',
      `remark` varchar(100) DEFAULT NULL COMMENT '备注',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=233 DEFAULT CHARSET=utf8 COMMENT='基础标签表';
    
    • 模型表:tbl_model,存储每个4级标签具体Spark 应用程序相关信息,对应与基础标签
    CREATE TABLE `tbl_model` (
      `id` bigint(20) DEFAULT NULL,
      `tag_id` bigint(20) DEFAULT NULL COMMENT '标签ID',
      `type` int(11) DEFAULT NULL COMMENT '算法类型:统计-Statistics、规则匹配-Match、挖掘-具体算法-DecisionTree',
      `model_name` varchar(200) DEFAULT NULL COMMENT '模型名称',
      `model_main` varchar(200) DEFAULT NULL COMMENT '模型运行主类名称',
      `model_path` varchar(200) DEFAULT NULL COMMENT '模型JAR包HDFS路径',
      `sche_time` varchar(200) DEFAULT NULL COMMENT '模型调度时间',
      `ctime` datetime DEFAULT NULL COMMENT '创建模型时间戳',
      `utime` datetime DEFAULT NULL COMMENT '更新模型时间戳',
      `state` int(11) DEFAULT NULL COMMENT '模型状态,1:运行;0:停止',
      `remark` varchar(100) DEFAULT NULL,
      `operator` varchar(100) DEFAULT NULL,
      `operation` varchar(100) DEFAULT NULL,
      `args` varchar(100) DEFAULT NULL COMMENT '模型运行应用配置参数,如资源配置参数'
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    

            依据上述两张表可以通过关联查询可以获取WEB 页面上表的基本信息,SQL如下(传递标签ID):

    USE tags ;
    
    SELECT
        tb.id AS tagId, tb.`name` AS tagName, tb.business, tb.industry,
        tb.`level`, tb.rule, tb.model_main AS modelMain, tb.model_name AS modelName,
        tb.model_path AS modelPath, tb.sche_time AS schetime, tb.args
    FROM (
             SELECT
                 tb1.id, tb1.`name`, tb1.business, tb1.industry,
                 tb1.`level`, tb1.pid, tb1.state, tb2.model_main,
                 tb2.model_name, tb2.model_path, tb2.sche_time,
                 tb3.rule, tb2.args
             FROM
                 tbl_basic_tag tb1
                     INNER JOIN
                 tbl_model tb2
                 ON
                         tb1.id = tb2.tag_id
                     INNER JOIN
                 tbl_rule tb3 ON tb1.id = tb3.tag_id
         ) tb
    WHERE
            1 = 1 AND tb.state != -1 AND tb.id = 8 ;
    

    1.1.5、新建:5级标签

            每个业务标签(4级标签)对应值称之为5级标签,所以在新建业务标签(4级标签)以后,需要在其下面新建具体的值(5级标签),如下图所示:

    在这里插入图片描述
            字段具体说明:

    1、标签名称:502、业务含义:注册会员出生日期为1950-1959年区间的
    
    3、标签规则:19500101-19591231
    

            新建【年龄段】业务标签:4级标签后,新建值标签:5级标签为例,截图如下:在这里插入图片描述

    1.1.6、总述:新建标签

            依据上述分析,如果要开发一个标签,业务需求整理完成以后,需在平台上新建标签,统一管理调度执行,以新建:【人口属性】-【性别标签】为例:

    在这里插入图片描述

    • 新建业务标签(4级标签)

    在这里插入图片描述

    • 新建业务标签值标签(5级标签、属性标签):性别标签有两个值-男和女

            □ 标签值:男

    在这里插入图片描述
            □ 标签值:女
    在这里插入图片描述

    1.2、组合标签

            基于已经存在的【基础标签】进行逻辑组合,形成特定业务标签,如下列举4个组合标签:
    在这里插入图片描述
            WEB 系统展示如下:

    在这里插入图片描述
            新建【组合标签】,具体操作如下图步骤:
    在这里插入图片描述
            选择【业务标签】,再选取对应的值,点击【添加】按钮,所有标签选择完成后,单击【下一步】。

    在这里插入图片描述
            组合标签名称、含义及用途等信息,最后保存并提交申请。

    在这里插入图片描述
    在这里插入图片描述

    1.3、微观画像

            依据用户:身份证号、手机号、QQ及Email,检索查询用户所有标签信息,构建展示用户画像信息。

    在这里插入图片描述
            使用官方提供的身份证号【110115199402265244】查询检索,展示结果如下:
    在这里插入图片描述

    1.4、标签查询

            依据标签筛选(各种标签组合)查询对应用户信息,底层使用solr完成。
    在这里插入图片描述

    小结

            本篇博客主要为大家介绍了【企业级用户画像】项目的标签系统,包含不同标签的细致分类以及效果展示。后续博主会为大家带来如何针对不同的标签进行开发,敬请期待😎

            如果以上过程中出现了任何的纰漏错误,烦请大佬们指正😅

            受益的朋友或对大数据技术感兴趣的伙伴记得点赞关注支持一波🙏

    在这里插入图片描述

    展开全文
  • 用户标签系统 数据库设计

    千次阅读 2017-02-21 20:06:26
    需求背景目前主流的博客系统、CMS都会有一个TAG标签系统,不仅可以让内容链接的结构化增强,而且可以让文章根据Tag来区分。相比传统老式的Keyword模式,这种Tag模式可以单独的设计一个Map的映射表来增加系统的负载和...
  • 关于标签系统的又一点想法。

    万次阅读 2015-05-05 18:25:45
    前段时间,写过一篇《关于标签系统的一点想法。》。但其实没有谈到里面的内容,是有一部分来自与刘鑫老师的聊天,当时他给了我许多肯定,也是让我觉得记录下来很有必要的原因。前一篇里没有提到,我跟刘老师谈到一个...
  • 个性化标签系统--架构设计教程

    千次阅读 2014-12-03 10:14:46
    花了点时间,写了一个教程,算是多年来对开源社区免费知识的一点点回馈。 需求文档,点击打开 个性化标签系统需求文档 ...个性化标签系统需求分析文档 ...个性化标签系统架构设计文档V0.1
  • 一:用户属性标签系统建设
  • 目前主流的博客系统、CMS都会有一个TAG标签系统,不仅可以让内容链接的结构化增强,而且可以让文章根据Tag来区分。相比传统老式的Keyword模式,这种Tag模式可以单独的设计一个Map的映射表来增加系统的负载和查询的...
  • 3种高效的Tags标签系统数据库设计…

    千次阅读 2014-11-25 14:04:25
    这篇文章主要介绍了3种高效的Tags标签系统数据库设计方案分享,现在主流的博客、CMS系统都有一个标签系统,本文就探讨它的数据库设计方式,需要的朋友可以参考下: 需求背景 目前主流的博客系统、CMS都会有一个TAG...
  • 絮叨两句: 博主是一名软件工程系的在校生,利用博客记录自己所学的知识,也希望能帮助到正在学习的同学们 人的一生中会遇到各种各样的困难和折磨,逃避是...企业级360°全方位用户画像:标签系统[四] 文章目录系列文章.
  • 开发高效的Tag标签系统数据库设计

    千次阅读 2013-08-07 15:06:00
    目前主流的博客系统、CMS都会有一个TAG标签系统,不仅可以让内容链接的结构化增强,而且可以让文章根据Tag来区分。相比传统老式的Keyword模式,这种Tag模式可以单独的设计一个Map的映射表来增加系统的负载和查询的...
  • 基于mongodb的标签系统设计

    千次阅读 2010-04-10 16:35:00
    以前基于lucene设计过一个标签系统,在数据量和并发量比较小的情况下勉强可以使用,数据超过100万条时查询就超过1秒,排序更是影响很大的性能,不适合中型网站的规模,最近在研究nosql数据库,发现mongodb很不错,...
  • 我们发现不少企业对标签体系和用户画像存在着一些迷思,构想经常如空中楼阁般浮在空中,他们时常将过多的精力陷在体系和系统的构建细节中并没有落地到实际的业务赋能上,即使构建了一个看似完美的标签体系,也无法使...
  • 1、论文简介 解决问题 标签组织混乱 标签语义模糊 ...社会化标签系统的好处 ...鼓励用户自发地创建、 选择和运用标签 可以充分地发挥用户的集体...用户操作的随意性又导致社会化标签系统中标签组织混乱和语义模糊, 严
  • 【分享】电子价格标签系统方案

    千次阅读 2018-12-21 17:12:57
    使用纸质价签的情况下,变价效率导致商品价签和收银系统价格不统一造成的价格“欺诈”; 纸质价签涉及的纸张、油墨、打印等人工成本; 国内人工成本的提高迫使零售业寻找新的销售增长点。 什么是电子价格标签 ...
  • 一套科学的标签体系,能够赋予用户画像以生气,并在用户获取成本飙涨的市场环境下,以最低的成本最大限度地挖掘客户生命周期的价值。随着越来越多的企业重视数据资产在更多业务场景中的应用,标签体系的高效搭建已是...
  • 分类与标签系统设计初体验-起

    千次阅读 2016-11-30 16:16:50
    需求分解数据库:存储1对1或者1对多的标签关系存储,(可以用关系型数据库或者nosql来实现); 操作:能够方便的增删改查; 操作响应速度:不要太慢,(需要使用索引或者cache加速复杂查询的速度);3种思路数据库...
  • 动易sitefactory 3.0 模板标签系统

    千次阅读 2012-03-08 15:49:00
    模板中使用标签 标签使用xslt 放在Template\Default 文件夹下
  • 该份数据是经过预处理的。... 该份数据适合用来做个性化推荐,社会化标签系统的研究。  数据堂免费提供数据挖掘数据集下载:http://www.datatang.com/data/44194  数据堂-国内科研数据免费下载平台

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 796,896
精华内容 318,758
关键字:

标签系统