先判断变化的是“字段含义”还是“承载格式”。如果只是把逗号换成换行、把域名列表换成CSV,通常只需调整分隔与去重规则;如果对象从网址变成关键词、从单值变成带修饰的查询串,输入规范要连同校验、去重和失败回退一起改,否则工具会把可解析但语义错误的对象当成有效输入。
表面格式变化指对象仍是同一类,只是排列方式变了。例如原来每行一个域名,现在改成一行多个、用逗号分隔;或者原来手工粘贴,现在从表格导出为带引号的CSV。这类变化的核心风险是分隔符冲突、首尾空白和重复项,规范改动量小,验证也直接:用同一批已知对象分别按新旧格式输入,比较被接受、被跳过和被改写的数量是否一致。
对象语义变化指输入代表的东西变了。例如从“页面地址”变成“搜索词”,或从“精确匹配的查询”变成“包含同义修饰的查询”。这时旧的长度上限、字符白名单、去重键都可能失效。判断依据不是看报错多少,而是看被接受的对象是否仍然表达你原本要查的那件事。若接受量上升但抽查发现语义被截断或合并,说明规范需要重写,而不是放宽。
如果你手上有完整、可核对的原始清单,优先做“双轨比对”,而不是直接覆盖旧规范。具体动作是保留旧规范的解析结果作为基线,用新规范再解析一遍,逐项列出三类差异:新增被接受、由接受变拒绝、解析结果被改写。只有第三类必须逐条人工确认,前两类可以按抽样比例决定是否继续。
这个动作的结果会直接决定下一步:若被改写项集中在含特殊符号的对象上,说明问题出在转义与引号处理,改解析规则即可;若被改写项分散且无规律,说明对象语义本身不统一,应先统一上游产出格式,再谈输入规范。缺少完整清单时不要做全量替换,先取一小段有代表性的对象跑通,确认改写规则后再扩大。
当你拿不到完整对象、也无法确认工具对某类对象的实际处理方式时,可执行的最小动作是“标记而非清洗”:在新规范里对不确定的对象加显式标记,让它们进入待确认集合,而不是被自动修正或丢弃。这样做的结果是你能看到不确定对象的规模与分布,再决定是补数据还是缩小任务范围。
需要明确不能推出的结论:待确认集合为空,不等于对象全部有效,也可能是不确定对象被静默跳过了;被接受数量归零,也不等于规范改错了,还可能是分隔符、编码或上游导出环节的问题。这些现象都只是线索,需要配合抽样核对才能定性。
假设原来输入是每行一个网址,现在改为每行一个查询串,且查询串里可能含空格和逗号。若沿用按逗号切分的旧规则,含逗号的查询串会被拆成两个对象,接受量上升但语义错误。此时应改为按行切分、仅对行首尾去空白,并把逗号视为对象内部字符;同时把去重键从“整行字符串”改为“规范化后的查询串”,明确是否折叠连续空格。
改完后用同一批对象分别跑新旧规则,比较被拆分的对象数量。若拆分数量降为零但出现新的拒绝项,检查是否引入了未声明的字符限制,而不是继续放宽分隔符。这个比较方法只说明规则差异,不说明哪种规则更正确,正确性取决于你要查的对象定义。
规范调整完成后,不要立即替换生产输入。先用新旧两套规范并行处理同一批对象,记录差异清单和待确认集合的大小;只有当差异项都能被解释、待确认集合规模可接受时,再切换。切换后保留一段时间的旧规范解析结果作为对照,便于发现语义被悄悄改写的情况。缺少完整数据时,这个对照范围可以缩小,但不能省略。