先看差异的形态再决定去重方式:如果每页固定条数、末页只是补零,通常属于分页重复计数;如果总数在翻页过程中持续增长或同一对象反复出现,则更像查询结果本身在漂移。
报告页数与实际对象数量不一致,常见原因有两类。第一类是分页取数时把同一批对象重复计入,例如每页20条,共5页,但最后一页只有7条,报告却按100条统计。第二类是对象本身重复,例如同一个词、同一个页面或同一个查询条件在多个分组中同时出现。两者的处理方式不同:前者修的是取数逻辑,后者修的是对象标识。
可以用一个假设例子区分:假设某次导出共4页,页面上分别显示20、20、20、13条,报告合计写93条,但去重后只有88条,差的5条来自同一对象在多个分组中重复出现。如果每页都满20条,末页也是20条,而报告合计写80条,实际去重后仍是80条,那么差异可能不在去重,而在筛选条件是否被重复应用。
当每个对象都有稳定且唯一的标识,例如关键词本身、页面URL或查询ID,优先按标识去重,而不是按页数去重。实施动作是:把每页导出的记录合并到一张表,保留标识列,删除标识完全相同的行,再重新计数。这个动作的结果会直接影响下一步——如果去重后数量与预期对象数接近,说明问题主要在重复取数;如果仍明显偏多,则要检查是否存在同一对象的变体,例如带参数的不同URL被当成不同对象。
当对象标识会随查询条件变化,例如同一关键词在不同匹配方式下返回不同结果,就不能直接按标识去重。此时应先固定查询条件,再比较页数与对象数。实施动作是:记录每次查询使用的筛选条件、排序方式和分页参数,用同一组条件重新取数一次,再对比两次结果中重复出现的对象。如果两次结果的对象集合基本一致,只是页数统计不同,说明差异来自分页计数;如果对象集合本身不同,说明去重前需要先统一查询口径。
去重后数量仍对不上,通常不是去重方法本身的问题,而是以下例外之一。第一,末页补零或空行被计入总数,导致报告页数大于实际对象数。第二,同一对象在多个分组中分别计数,但分组之间没有做全局去重。第三,查询结果在翻页过程中发生变化,例如排序不稳定导致同一对象出现在不同页。前两种可以通过合并分组、删除空行解决;第三种需要固定排序字段,再重新取数。
需要说明的是,请求量、抓取量或某项统计归零,并不能单独证明去重正确。它还可能来自筛选条件过窄、查询对象被过滤或取数时间窗口不同。判断去重是否有效,应看去重前后的对象集合是否可解释,而不是只看总数是否变小。
这套步骤的适用条件是:对象标识可获取、查询条件可复现。如果对象标识依赖工具内部生成且无法导出,或者查询条件无法固定,那么去重只能作为近似处理,不能直接照搬到规模化场景。此时更稳妥的做法是先缩小查询范围,确认小样本下去重结果与预期一致,再逐步扩大范围,而不是一次性对全量报告做去重。