先不要凭文件名判断,应该用文件内可独立验证的标识去核对。常见做法是拿标题里的专有名词、编号或时间点反向查文件;如果内容里没有这些锚点,就改用导入日志中的行号或批次顺序。两种做法各有代价:前者准确但要求内容本身可辨识,后者快但一旦文件被重命名或跳过一行就会整体错位。
第一种是排序解释:导入时按文件名字母序或修改时间排列,而标题列表按另一套顺序生成,两边都没错,只是顺序基准不同。第二种是内容解释:某个文件被替换、删行或重复导入,导致从某一条开始整体后移一位。两种解释的表象很像,都是标题和文件对不上,但处理方式完全不同。
区分证据是看错位是否连续。如果从第一条起就错,且后面每条都稳定偏一位,排序解释更可能成立。如果前面若干条正确,从中间某条开始才错,后面全部偏移,内容解释更可能成立。还有第三种情况:只有个别条目错,前后都正常,那多半是单条内容里出现了与标题相似的词,被误当成匹配依据。
具体动作是:从标题中挑一个最不可能在别处出现的词,比如产品编号、地名、人名或一个不常见的组合词,直接在文件正文里查找。找到后,再确认这个文件的其他特征是否与标题描述一致,例如段落数量、开头句、结尾句。
这个动作的结果会直接影响下一步。如果每个标题都能在唯一文件里找到对应锚点,说明错位只发生在展示层,文件本身没有丢,重新按锚点排序即可。如果某些标题在任何文件里都找不到锚点,说明文件可能缺失或被替换,这时继续调整顺序没有意义,应先补齐文件。
当标题都是通用词,比如“常见问题”“使用说明”,内容锚点法会失效。此时应回到导入日志,看每个文件被读取时的行号、批次或时间戳。把日志里的顺序与标题列表的顺序并排比较,找出第一个不一致的位置。
这里有个容易踩的坑:日志顺序正确,不代表最终展示顺序正确。如果中间还有一步人工调整或模板渲染,错位可能发生在日志之后。所以核对时要确认日志记录的是“读取顺序”还是“写入顺序”,两者不一致时,以更接近最终展示的那一步为准。
假设导入100个文件,标题是“第一章”到“第一百章”。用内容锚点法,需要逐条查找“第X章”在文件中的位置,准确但耗时。用日志行号法,只需比较两份列表的第一个差异点,快但要求日志完整。
选择条件是:如果标题含唯一编号,优先用锚点法,因为编号本身就是最可靠的对应关系;如果标题重复率高且日志完整,优先用日志法。代价是,锚点法在标题无唯一词时几乎不可用,日志法在日志被截断或覆盖时会把错误顺序当成正确顺序。
找到错位原因后,不要立刻全量重排。先取错位段落的前后各三条,按确定的方法重新对应,检查标题与文件是否一致。这个动作的结果决定下一步:如果小范围验证通过,再扩展到全量;如果小范围仍错,说明判断的原因不对,应回到上一步重新区分排序解释和内容解释。
另外,比较调整前后的效果时,要考虑搜索需求本身的波动和采集时间差异,不能把一次顺序修正前后的数据变化直接当成修正起效的证据。