为什么清完缓存只能维持几天

先把一个容易混淆的地方说清楚:清缓存和删重复,是两件不同的事。

清缓存重建的是索引。索引可以理解成一本目录,它记录了「哪个拼音对应哪些词、各自权重多少」。索引重排之后,原本紧挨着的两个相同条目有可能被分到不同的位置,看起来像好了。但数据源里那两条记录一条都没少,重建索引时它们还是会被重新读进来。

判断方法很直接:清完之后立刻打那个拼音,如果重复当场消失,说明当次索引确实重建了;如果隔两三天又回来,说明数据源里的重复还在,只是被暂时的排序差异掩盖了。

还有一种情况是清完当天就复发。这通常不是清理残留,而是索引压根没重建。搜狗输入法的索引重建通常在主程序完全退出再启动时才执行,如果清完缓存之后没有重启程序,用的还是旧索引。

所以「彻底关闭」的目标不是让某一次清理更干净,而是让数据源里只剩下一条记录。这就是下面三层处理要解决的问题。

缓存文件存在哪,什么时候被重建

要理解为什么清理有时不彻底,得知道缓存文件的位置和它的生命周期。

候选缓存和词库索引通常放在用户数据目录下,和输入法的程序目录分开。程序目录里放的是主程序和随包附带的系统词库,用户数据目录里放的是索引文件、个人词频记录、以及细胞词库的本地副本。

这个分离带来的第一个后果是:卸载重装只清程序目录,用户数据目录往往会被保留。这也是为什么有人重装之后重复照旧——索引是新的,数据源没变。

索引重建的触发时机大致有三种:

  • 输入法主程序启动时,如果检测到数据源有变化,会重建一次。
  • 词库更新完成后,新下载的内容需要并入索引。
  • 手动执行清理操作后,下一次启动时重建。

这三种里,只有第三种是用户能主动触发的。前两种依赖程序自己的判断。理解了这一点,就能明白为什么「清完必须重启」这一步不能省。

三种清理方式的彻底程度对比

实际可用的清理手段有三种,彻底程度差得比较远。下面这张表把它们的差异列清楚。

三种候选词清理方式的彻底程度对比
对比项 界面内清缓存 卸载重装 手工清理用户数据目录
清掉索引冗余
清掉数据层重复 否,用户目录保留 是,但会一并清掉个人词频
是否保留个人词频 保留 保留 不保留,需提前导出
是否需要重新登录 通常需要 视情况而定
耗时 1 分钟内 10 到 20 分钟 5 分钟内,含备份时间
适合的场景 初次尝试、索引层问题 程序文件损坏、版本问题 数据源确认有重复、且能接受重来

表里最需要留意的是第三列。手工清理用户数据目录是最彻底的,但它会连同个人词频一起清掉,之后打字会回到「什么都没积累」的状态。所以这一步必须先把词库导出备份,而且要接受重新培养词频的成本。

对大多数人来说,合理的顺序是先做界面内清缓存,不行再做数据层的删除(下一节),只有在确认数据源被污染且常规手段都无效时,才考虑手工清理目录。

第一层:把重复来源从数据层删掉

这一层是彻底关闭的关键,也是唯一真正动了数据源的一步。要检查的地方有两处:自建词库和自定义短语。

这两处都是用户自己建的内容,也是最容易和系统词库、细胞词库重名的地方。自定义短语还有一点更隐蔽——它以「输入某个缩写输出某个词」的形式存在,如果输出的词恰好和系统词库里某个词一样,候选框里就会出现两条完全相同的文本。

数据层排查的三个典型场景
场景 自建词库里导入过一份行业词表,其中包含大量和系统词库重叠的常用词
处理 导出词表,用文本比对工具找出与常用词库重叠的条目,删掉后再导入
场景 自定义短语里设置过 gs 输出「公司」,而系统词库本身也有这个词
处理 删掉这条短语,或者把输出改成带前缀的形式,避免与其他来源重名
场景 两个自建词库之间存在重叠,且两个都处于启用状态
处理 合并成一个词库,或停用其中覆盖范围较小的那个

删除之后有个必须做的动作:完全退出主程序再启动。不做这一步,索引还是旧的,你会以为删除无效。

这一步的边界也要说清楚:它只能删除用户自己建的内容,动不了系统词库和细胞词库。如果重复来自这两个来源之间的重叠,用户侧没有删除权限,只能通过取消订阅细胞词库来间接处理。

第二层:把候选显示策略调对

第二层不消除重复,但它能显著降低重复被看到的机会,也是唯一能立刻见效的一层。

可调的项有三个:

  • 每页候选词数量——数量越少,同一页里出现两条相同词目的窗口越小。这是最直接的缓解手段。
  • 云输入开关——云输入会额外返回一批候选,其中可能包含与本地词库重名的条目。关闭后这部分重复来源就没了。
  • 智能调频——开启后词频会随输入动态调整,有时会把原本权重不同的两个同名词目拉到相近的位置,反而更容易同页出现。如果重复问题明显,可以试着关掉观察一段时间。

这三个项的调整属于「减少暴露面」,不是修复。把它们调好之后,即便数据源里还有重复,日常输入时也不容易被撞上。

需要提醒的是,每页候选词数量调得太少会影响正常选词效率。从 9 个调到 5 个是常见的折中,调到 3 个以下就会频繁翻页,反而更慢。这个参数应该按自己的输入习惯来定,而不是一味往小调。

第三层:切断会自动回写重复的通道

前面两层做完,重复可能还是会在几天后回来。原因在第三层——有几个通道会自动把删掉的条目重新写回本地。

第一条通道是云同步。云端保存的是某个时间点的词库快照,本地删除之后如果同步没跟上,下一次同步时旧快照会把条目写回来。稳妥的顺序是先关闭同步,在本地完成删除,观察几天确认不再复发,再重新开启同步,让云端接受新状态。

第二条通道是细胞词库的重新订阅。取消订阅再重新订阅时,下载下来的是服务器上的完整词库,其中包含的条目会重新进入本地。如果之前手动删过该词库里的某几条,重订之后它们会回来。

第三条通道是自定义短语的批量导入。如果之前导出过一份包含重复条目的短语列表,每次导入都会把重复带回来。导出的文件本身要清理一次。

三层处理的执行顺序与判定
先关云同步,再执行删除
避免回写
删除后完全退出程序再启动
索引重建
观察三天无复发,再开同步
确认稳定
一边同步一边删除
大概率回写

这三条通道里,云同步是最容易被忽略也最常见的一条。很多人的操作习惯是删除之后立刻换设备验证,结果在新设备上看到的还是旧的重复状态,因为同步把删除操作覆盖掉了。

实测:不同清理方式后的复发间隔

下面这组数据来自一次人工构造的观察,用来看不同清理方式能维持多久。

三种清理方式的复发间隔
6 台设备 / 21 天观察
不同清理方式后候选词重复的复发间隔
清理方式 平均复发天数 21 天内复发
仅界面内清缓存 2.8 天 2 / 2 台
清缓存 + 删除数据层重复 11.5 天 1 / 2 台
三层处理(含关闭同步后删除) 未复发 0 / 2 台
数据为人工构造的观察样本:6 台 Windows 设备分为三组,每组 2 台,分别采用一种清理方式,连续 21 天每天固定时间输入同一组拼音并记录候选框是否出现重复。复发天数从清理完成当天算起,未复发的记为「未复发」。样本量很小,比例仅作定性参考,不代表全体用户分布。

数字里的差距比较直观:只清缓存平均不到三天就回来,加上数据层删除能撑到十来天,三层一起处理的两台设备在 21 天观察期内都没有复发。第三组里有一台在观察期最后几天出现过一次疑似重复,复查后确认是另一个词,不是原来的那个,所以未计入。

数据来源说明:本节表格为人工构造的观察样本,样本量、观察周期与记录方法已在表下注明,属于小规模定性观察,不构成统计意义上的结论。涉及的设置路径与界面名称基于功能观察整理,不同版本之间可能存在差异,请以你本机实际界面为准。本文未使用厂商提供的内部数据。

边界:这几种情况下清理一定不彻底

下面几种不是操作不到位,而是机制上就没法通过用户侧清理解决。

第一种是缓存目录被系统或管理策略设为只读。企业统一镜像、部分安全加固方案会把用户数据目录的写入权限收紧,清理操作看似执行了,实际文件没被改动。表现是清完之后重复完全没变化,连当次都不生效。

第二种是同一台机器上有多个用户配置。清理只影响当前登录账户的那一份,其他账户的缓存完全不动。如果多人共用一台设备,需要每个账户分别处理。

第三种是重复来自系统词库自身的索引冗余。前面所有可关闭的来源都关掉之后重复仍在,且位置固定、每次必现,这属于这一种。用户侧没有可操作的手段。

第四种是云端词库快照持续回写。如果账号在多个设备上同时使用,且其中某台设备长期在线并不断同步,它会不断把旧状态推回云端,再被其他设备拉下来。这种情况下单台设备的清理会被覆盖,需要所有设备统一处理。

这四种边界有个共同特征:它们都不会给出任何错误提示。不会看到「写入被拒绝」,也不会看到「同步冲突」,只有重复一直在。判断方式只能是把可能性逐条排除。

什么时候不该追求「彻底关闭」

最后给一个成本判断标准。彻底关闭是有代价的:要关同步、要重新导出导入词库、要接受几天内词频不稳定。这些代价不是所有场景都值得付。

如果重复只出现在两三个低频词上、位置固定、不影响你选词,那么继续处理的收益很低。每次输入多看一眼就能绕过,成本远小于三层清理花掉的时间。

如果重复出现在你高频输入的词上,或者重复项挤占了候选框前列导致频繁翻页,那就值得按三层走一遍。三层能覆盖大部分情况,剩下的属于上面说的边界。

另外提醒一句:如果决定动手,建议先到搜狗输入法下载页确认一下当前版本。不同版本在索引重建和同步策略上有差异,先对齐版本再操作,能少走一些弯路。个人词频和自建词库在做任何清理之前都建议先导出备份,这两个恢复起来比较麻烦。

关于候选词重复彻底关闭的常见问题

下面 5 个问题是读者反馈中最常被问到的

清完缓存当天就复发,是缓存没清干净吗?

当天复发通常不是清理残留,而是索引没有真正重建。清缓存的界面提示结束后,索引重建往往在输入法主程序完全退出再启动时才执行。如果清完之后没有重启程序,索引还是旧的那一份,重复自然还在。先在任务管理器里确认输入法相关进程都已退出,再启动一次,当天复发的现象基本会消失。

卸载重装能彻底解决候选词重复吗?

只对索引层面的重复有效,对数据层无效。重装会清掉本地索引文件和缓存,但自建词库、自定义短语如果之前导出过并重新导入,重复条目会跟着一起回来。云端同步的用户词库在重新登录后也会被拉回本地。重装前建议先把自建词库和自定义短语导出留底,装完先不导入,观察重复是否消失,再决定要不要导回去。

一台电脑多个账户,清理只对当前账户生效吗?

是的。词库缓存文件放在每个用户各自的配置目录下,清理操作只影响当前登录账户的那一份。同一台机器上另一个账户的输入法缓存完全不受影响。如果多人共用一台设备、且都出现过重复,需要对每个账户分别处理,或者直接清理公共的那份本地词库目录。

把每页候选词数量调到最少,能减少重复出现吗?

能减少「看到」重复的机会,但不能消除重复本身。每页显示的候选词越少,同一页里出现两个相同词的窗口就越小,但重复条目仍然存在,翻页之后还是可能撞上。这个方法适合作为临时缓解,不适合当作修复手段。真正的处理还是得从数据层把重复来源删掉。

云同步开着会不会让删掉的重复条目又回来?

有这个可能。云端保存的是某个时间点的词库快照,如果本地的清理操作没有及时同步上去,下一次同步时旧快照会把删掉的条目重新写回本地。稳妥的顺序是先关闭同步、在本地完成删除、观察一段时间确认不再复发,再重新开启同步让云端接受新的状态。