如何搭配自动建议功能规避MySQL表的相似重复条目问题
全品类活动提交场景相似重复条目落地方案
整套方案不需要对接任何领域专属标准库,通过三层拦截把重复提交率压到5%以内,同时不会过度拦截正常的全新内容提交。
第一层:输入实时联想阶段的模糊匹配
把现有精确匹配逻辑替换成归一化+相似度匹配,覆盖绝大多数表述差异场景:
- 所有用户输入内容、数据库存量条目统一做前置文本预处理:全角字符转半角、英文字母统一转小写、移除所有标点和特殊符号(冒号、斜杠、连字符、多余空格等)、维护一份仅包含全网通用缩写的极小映射表(比如BOTW对应Breath of the Wild、LOL对应League of Legends这类跨领域通用的缩写,不需要做领域专属内容)。举例的几个Zelda相关条目预处理后会统一成
zelda breath of the wild/zelda botw格式,不会因为标点、空格、大小写差异匹配不上。 - 实时检索不要用SQL的
like语法,用编辑距离(Levenshtein距离)计算输入内容和存量条目的相似度,短文本(字符长度<10)相似度阈值设为0.9、长文本阈值设为0.85,达到阈值就按相似度从高到低弹出最多5个关联条目,每个条目旁直接放置「为这个内容投票」按钮,用户点击后直接完成投票,不需要走新建流程。 - 如果存量条目总量超过10万,提前给所有条目生成3-gram字符索引,避免实时计算相似度拖慢接口响应速度,单接口响应可以稳定在100ms以内。
第二层:提交动作触发的二次校验
用户点击提交按钮时不要直接写入数据库,做二次校验拦截:
- 再次计算提交内容和存量条目的相似度,只要存在相似度高于0.8的条目,就跳转确认页,把高相似条目放在页面最醒目位置,提示「以下内容与你提交的内容高度相似,可直接选择已有内容投票」,给出两个明确操作选项:「选择已有内容投票」「确认提交全新内容」。
- 用户选择提交全新内容的,不要直接进入公域可见池,先给内容打
待校验标记,同时为内容生成simhash指纹存入数据库,后续新提交内容如果和该指纹汉明距离小于3,自动归为同一条目候选组,减少后续重复校验的计算量。
第三层:后置运营兜底,越用准确率越高
不需要投入大量审核人力,靠轻量机制覆盖漏网的重复内容:
- 所有公域可见条目开放「标记重复」入口,单个条目被3个及以上认证用户标记为重复后,自动进入待合并队列,管理员仅需处理队列内内容,将重复条目绑定的投票数统一合并到主条目即可。
- 所有被合并的重复条目名称不要删除,作为别名绑定到对应主条目下,后续用户提交匹配到别名时直接映射到主条目,系统运行时间越长,别名库覆盖越全,匹配准确率会持续提升。
注意不要一开始就设置过高的拦截阈值强制阻止用户提交,优先做引导,软拦截的用户接受度远高于硬拦截,实际运行中大概80%的重复提交会在实时联想阶段被用户主动选择已有条目消化,剩下20%里的九成会在二次确认阶段被拦截,最后漏过的重复内容靠用户标记机制处理即可。
内容的提问来源于stack exchange,提问作者nameless
相关产品推荐
相关产品推荐

