先给结论:报告页数偏大,通常不是“多抓了对象”,而是同一对象被多个查询入口、多个镜像或多次翻页重复计入。去重前先确认你要的是“唯一对象数”还是“有效快照数”,这两个口径对应完全不同的处理方式。若目标是盘点对象,按对象标识去重;若目标是评估快照覆盖,按快照地址去重,并保留重复次数作为覆盖强度信号。
报告页数大于实际对象数量,常见原因有三类:同一对象有多个访问地址、同一地址因参数或分页被重复记录、同一对象在不同时间点各留一条记录。三者对应的去重键不同。
可区分原因的证据很直接:抽 20 条记录,看对象标识列有多少个不同值。若不同值远少于行数,是对象重复;若对象标识基本唯一、地址却高度相似,是快照重复;若对象标识和地址都相同、只有时间列不同,是时间重复。这个抽样动作的结果决定下一步用哪个键,而不是先写去重脚本。
做法一:按对象标识去重,只保留每个对象一条记录。做法二:按规范化地址去重,保留每个地址一条记录,同一对象的多地址都留下。两者都成立,但适用条件不同。
选做法一的条件:你要回答“有多少个对象被覆盖”,需要与业务清单、库存表或目录数量对齐。代价是会丢掉同一对象的多地址覆盖情况,如果某个对象只有部分地址被更新,去重后看不出来。
选做法二的条件:你要回答“快照分布在哪些地址上”,需要排查某些地址长期未更新。代价是对象数量会被高估,因为一个对象可能对应多个地址。
假设一个对象有主地址和两个别名地址,报告显示 3 行。按对象标识去重得到 1,按地址去重得到 3。若你的目标是核对目录总数,用 1;若你的目标是找出哪个别名地址没更新,用 3。这个假设只说明比较方法,不代表任何工具的实际输出。
规范化是去重的前置动作,不做这一步,地址去重会失效。常见动作包括:去掉跟踪参数、统一协议与末尾斜杠、统一大小写、把分页参数归并到主地址。做完规范化后再统计唯一值数量,与对象清单比对。
一个可执行顺序:
标记而非直接删除,是为了让下一步可回溯。如果后续发现某个别名地址确实需要单独跟踪,可以从标记记录里恢复,而不必重新导出。这个动作的结果直接影响你是否需要调整抓取范围:若对象重复占多数,应检查入口是否重复提交了同一对象;若快照重复占多数,应检查地址参数是否被当成不同页面。
有几种情况去重会掩盖真实问题。第一,同一对象的多语言或多地区地址,如果业务上分别维护,不应合并为一条。第二,同一地址在不同时间的快照,如果用于观察更新频率,应保留时间序列而不是只留最新一条。第三,报告页数本身作为抓取量指标时,重复计入可能反映入口配置问题,此时应保留原始行数并单独记录去重后数量,两者并列而不是互相替代。
另外,请求量、抓取量或某项统计归零,不能单独证明去重做对了。归零也可能来自过滤器写错、权限变化或导出范围被截断。判断去重是否正确,要看唯一值数量是否与已知对象清单吻合,以及抽样记录能否人工复核通过。
去重不是一次性脚本,而是口径约定。在报告里固定写明:本次统计的是唯一对象数还是唯一地址数、去重键是什么、规范化规则有哪些、保留还是标记重复。下次报告页数再次偏大时,先核对口径是否一致,再决定是否修改去重逻辑。若工具本身的具体字段名、导出选项或去重功能不明确,需要以该工具当前版本的实际界面和文档为准,不要按记忆假定。
最终判断标准很简单:去重后的数字能对应到你手上的一份对象清单,并且每一条保留记录都能说清它代表哪个对象或哪个地址。做不到这一点,说明去重键选错了,应回到抽样那一步重新确认差异来源。