结论先给:如果新对象只是同一批站点的表达方式变了,改输入规范;如果新对象代表的是另一类分析单元,先改流程再改规范。判断依据不是格式看起来是否整齐,而是清洗后能否稳定还原出“一个对象对应一行、一行对应一个可独立解释的查询单元”。
把待处理对象摊开看,通常会遇到两类情况。第一类是表达变化:同一批站点、页面或词,过去用A写法,现在用B写法,例如带协议与不带协议、带尾部斜杠与不带、大小写混用、参数顺序不同。这类变化适合通过输入规范解决,因为对象边界没变。
第二类是对象变化:过去一行是一个域名,现在一行可能是一个域名加一组子目录,或者一个页面加一组查询词。这时如果只改规范,会把原本独立的查询单元压成一行,后续汇总、去重和对比都会失真。取舍条件是:能保持一行一对象的映射关系,就改规范;不能保持,就先改流程。
规范不是把格式统一得好看,而是让每一步处理都能被复核。建议先定三条规则,每条都配一个可观察的结果。
这里有一个实际动作:拿一小批新旧混合对象跑一遍归一化,统计归一化后仍无法归并的行数。如果这些行都能被解释为“确实是不同对象”,说明规范够用;如果它们只是表达差异,说明归一化规则还缺条件。这个结果直接决定下一步是扩大处理范围,还是先补规则。
假设某次对象从“纯域名列表”变成“域名加落地页路径”,你把规范改成按域名聚合,所有路径被折叠到域名下。表面上看行数减少、格式统一,但后续想回答“哪个落地页带来的查询意图更集中”时,原始路径信息已经丢失,无法还原。这个反例说明:规范改动的代价是信息粒度的损失,而不是格式美观度的提升。
因此,当新对象需要保留路径、参数或词与页面的对应关系时,不应把规范改成更粗的聚合,而应把输入拆成两张表:一张保留对象明细,一张保留聚合结果。两张表用同一个对象标识关联,既满足格式统一,也不牺牲可解释性。
可以用下面几个问题做快速判断,答案会指向不同动作。
这些检查点的作用是避免把“格式不一致”误判为“对象不可用”。请求量或抓取量下降、某些行消失,并不能单独证明规范改对了,也可能只是归一化把不同对象合并了,或者异常行被静默丢弃。需要结合原始明细和归一化日志一起看。
确定方向后,下一步不是直接全量替换,而是做一次小范围验证:选取新旧对象都覆盖的一小批数据,分别按旧规范和新规范处理,比较对象数量、可归并行数和无法解释的行数。如果新规范在保持对象边界的前提下减少了无法归并的行,就可以进入下一步;如果只是行数变少但对象边界变模糊,就回到流程层调整。验证通过后再把规则写入输入约定,并保留一份原始对象快照,方便后续核对。