Skip to main content

标签系统

前言

什么是标签

标签(Tag)是被指定给一条信息的关键字或词语。随着WEB2.0的应用标签才广泛被使用,目的是为了更好的显示和突出搜寻的重点关键词或者词条,以便更好的引导用户浏览和被搜索引擎捕捉。用户可以为每篇日志、每个帖子或者每张图片等添加一个或多个标签,用户也可以看到网站上所有使用了相同Tag的内容,由此和他人产生更多的联系。

标签体现了群体的力量,使得内容之间的相关性和用户之间的交互性大大增强。标签将内容的组织权力从网站管理者下放到用户手中,充分体现了WEB2.0自下而上,用户参与的特点。标签已经成为了WEB2.0的重要元素。

标签要解决的问题

  • 对于复杂类型的数据按照传统的目录结构进行分类无法做到细化分类。例如电商网站上的商品,不仅种类繁多而且每种商品的属性也不相同,按照目录结构分类的话会使整个目录结构异常庞大,非常不利于商品的组织及查找。

  • 对于数据的统计一般以数据的内容为主体,如果内容复杂的话不仅增加了统计难度也可能会降低统计结果的准确性。一组销售数据,如果要统计各种商品在各个地区的受欢迎程度,此时涉及到的内容不仅有商品的种类还有用户所在的地区,会比单一实体的统计更复杂,同时干扰因素也会更多。

  • 层级筛选是一种可以精准过滤数据的查询方式,但这种自上而下的筛选方式往往无法满足用户的搜索需求。比如网购鼠标时,联想和戴尔这两个品牌均有有线和无线两种连接方式的产品。用户在搜索商品时,我们无法要求用户先选择品牌还是先选择连接方式,二者之间并没有明确的先后顺序。

标签可以用来做什么

  • 利用标签进行分类可以用较少的代价细化分类。当被分类对象包含的内容比较多的时候,可以给该对象打上不同的标签,这些标签就相当于被分类对象涉及的关键词。

  • 标签可以简化数据统计的过程,提高统计的准确性。标签是内容相关的关键字,用统计标签代替统计内容降低了统计的复杂度,简化了统计过程的同时也能提高准确率。

  • 通过标签筛选数据可以灵活的过滤出用户想要的内容集合。因为标签之间是平行的,用户只需要选择相应的标签就可以迅速的筛选出符合期望的结果集。

业务需求

实现一个基础的标签系统,以便适用于各类业务场景。

用户故事

  • 标签类型管理 管理员可以对标签类型进行增删改查等操作。
  • 树形结构展示 用户可以通过树形结构的形式查看标签列表。
  • 标签管理 用户可以添加、修改、删除标签。
  • 给实体打标签 用户可以在新建内容的同时为其添加标签。
  • 删除实体上的标签 用户可以删除自己在实体上打的标签。
  • 查询实体上的标签 用户可以查询实体上有哪些标签。
  • 查询标签对应的实体 用户可以查询同时拥有某些标签的实体列表。

分析与设计

领域模型

标签领域模型图

API设计

标签类型

  • 添加标签类型:[post] /tag-types
  • 更新标签类型:[patch] /tag-types/:type
  • 获取标签类型:[get] /tag-types
  • 标签类型详情:[get] /tag-types/:type
  • 删除标签类型:[delete] /tag-types/:type

标签

  • 添加标签:[post] /tag-types/:type/tags
  • 更新标签:[patch] /tag-types/:type/tags/:tagId
  • 获取标签:[get] /tag-types/:type/tags
  • 标签详情:[get] /tag-types/:type/tags/:tagId
  • 删除标签:[delete] /tag-types/:type/tags/:tagId

标签实体关系

  • 给实体打标签:[post] /entities/:entityId/tags
  • 查询实体上的标签:[get] /entities/:entityId/tags
  • 查询标签对应的实体:[get] /entities
  • 删除实体上的标签:[delete] /entities/:entityId/tags/:tagId

数据库设计

标签数据库设计图