场景

评论系统词库从几百增长到几十万后,逐词扫描会拖慢请求;用户插入空格、符号或同音变体又能绕过简单匹配。

原理

暴力匹配对每个词重复扫描文本,Trie 利用公共前缀减少比较,AC 自动机通过失败指针在一次扫描中匹配多模式。双数组 Trie 改善内存布局。工程上还要在匹配前做规范化,并处理最长匹配和重叠结果。

设计步骤

先定义拦截、替换、标记等业务策略;对文本统一大小写、全半角和可接受的符号;按词库规模选择 Trie 或 AC 自动机;构建不可变词典并原子热切换;记录命中规则版本,离线评估误杀与漏检。

权衡

规范化越激进越能对抗变体,也越可能误伤正常表达。同步过滤结果及时但占用请求延迟;异步审核吞吐高,却允许内容短暂可见。布隆过滤器只能快速判断“可能存在”,不能替代精确匹配。

实践建议

词库按业务、语言和风险分级,变更经过审核与回滚。超长文本限制长度或分段时保留模式边界。监控耗时分位、命中率、词库大小和更新失败。敏感词系统只是内容治理的一层,复杂语义仍需模型和人工复核。

落地检查

上线前还应做一次桌面演练:准备正常、边界、超时、重复与恶意输入,确认系统的返回、日志和指标彼此对应;在预发布环境模拟依赖不可用、进程重启和配置回滚,验证降级路径不会放大故障。上线时采用小流量观察,提前定义停止条件与负责人。稳定后复盘真实数据,删除没有收益的复杂度,并把新发现的约束补进测试、监控和设计记录,使方案能够随业务持续演进,而不是停留在一次性评审结论。