先给结论:中断后不要用“扫描到第几条”来判断覆盖范围,而要用“已完成的分片清单”与“未完成的分片清单”来界定。分词工具扫描全站时通常按页面或分片推进,中断只意味着当前分片未完成,已完成分片的结果仍然有效。判断覆盖范围的关键动作是导出已完成分片标识,与全站清单做差集,得到未覆盖部分;这个差集决定你是续扫、重扫还是可以先用部分结果做判断。
中断后常出现两种相反的现象:进度条停在某个位置,但已产出的分词结果数量看起来接近全站页面数;或者进度条接近完成,结果里却明显缺少某些栏目。这两种现象并不矛盾,因为进度条反映的是任务调度进度,结果数量反映的是已落盘记录数,两者统计口径不同。
如果分词工具按分片并行处理,调度进度可能显示的是“已派发分片数”,而落盘结果是“已完成分片数”。派发在中断前可能已经覆盖大部分分片,但真正完成并写入结果的只是其中一部分。因此进度接近完成、结果却缺栏目,是正常的口径差异,不是工具出错。
中断后的“结果不完整”通常有两种解释,区分它们决定你下一步是补扫还是等待。
两种解释对应不同动作:覆盖缺口需要补扫,未落盘需要先确认临时文件是否可恢复,再决定是否重跑。把未落盘误判为缺口会导致重复劳动,把缺口误判为未落盘会导致结果被高估。
要区分上述两种解释,可以收集三类证据,它们比进度条更可靠。
一个假设的例子:假设全站有100个分片,中断时状态文件显示60个已完成、5个处理中、35个待处理。那么已覆盖范围是60个分片,未落盘是5个,缺口是35个。此时应先尝试恢复5个处理中的分片,再补扫35个待处理分片,而不是全站重扫。这个数字只是说明比较方法,实际分片数和状态字段以你的工具为准。
判断覆盖范围的实际动作是导出已完成分片标识,与全站分片清单做差集。这个动作的结果直接决定下一步:
做差集时要注意:全站清单本身可能是在扫描开始时生成的,如果扫描期间站点有新增或删除页面,差集结果会包含这些变化。因此差集只能说明“相对于扫描开始时的清单”的覆盖范围,不能直接等同于当前全站覆盖范围。如果扫描期间站点变动频繁,需要重新生成全站清单再比对。
部分结果能否用于后续判断,取决于你的用途和缺口分布,而不是缺口大小。
一个可操作的判断方法是:先按栏目统计已完成分片和缺口分片的比例。如果某个栏目的缺口比例明显高于其他栏目,说明中断对该栏目影响更大,基于部分结果做栏目间对比会产生偏差。如果各栏目缺口比例接近,部分结果的偏差相对均匀,可以先用,但结论要保守。
最后一步是把判断结果写进任务记录:已完成分片数、缺口分片数、未落盘分片数、以及你选择的动作(恢复、补扫或重扫)。这样下一次中断时,你可以直接复用这套差集方法,而不必重新摸索覆盖范围。