跳到主内容

手撸本地文件搜索工具:Windows 全文检索踩坑与选型全过程

我硬盘里躺着 41 万个文件,其中光素材库就占了 12 万。上个月要找回一张 2019 年的产品截图,Windows 自带的搜索转了整整 8 分钟,最后给我返回个"没有结果"。我不信,又搜了一次,这次它找到了——在另一个目录里,一个我明明搜过的目录。

这不是个例。Windows Search 的问题在于它只索引你告诉它的位置,而且默认排除了一堆"系统认为不重要"的目录:隐藏文件夹、ProgramData、部分开发目录、Node 的 node_modules。你搜不到东西,不一定是没有,很可能是它根本没往里看。

所以我花了两个周末,把能找到的本地文件搜索工具挨个装了一遍。这篇不吹某个工具多神,只讲一件事:什么场景下该用哪个,以及我踩过的那些坑。

先说我最后留下的三个

装过、卸载过的工具不下十个,最后留在机器上的只有三个,各管一段:

  • Everything——日常按文件名找东西,几乎零延迟。它靠直接读 NTFS 的 MFT(主文件表),不走常规遍历,所以你刚存的文件它几秒内就能搜到,甚至不用等索引"跑完"。
  • DocFetcher——需要按文件内容找的时候用它,Word、PDF、Excel、代码通吃(EPL-2.0 许可,商用没问题)。
  • fzf——终端里顺手用的,管命令行场景,和上面两个不冲突。

如果只让我推荐一个,给绝大多数人:Everything。但下面这些坑,装之前最好先知道。

装了 Everything 却搜不到文件?先看这三个地方

这是我遇到的第一个坑,也是最容易让人放弃的一个。当时我从 C 盘移植到 D 盘的一个项目目录死活搜不到,重装了两遍软件都没用。

排查路径(从外到内):

  1. 看索引范围里到底有没有那个目录。菜单 → 工具 → 选项 → 索引 → 文件夹,这里是白名单机制,只在列表里的路径才会被索引。新插的移动硬盘、映射的网络盘,默认都不在里面。
  2. 看是不是被"排除列表"拦了。另一个标签页叫"排除",里面可能躺着 `node_modules`、`*.tmp` 这类默认规则。你要是正好在找 node_modules 里的东西,那必然搜不到。
  3. 看文件系统类型。前面说 Everything 靠读 MFT,这是 NTFS 专属。FAT32 的 U 盘、exFAT 的移动硬盘、以及各种网络共享盘,它只能退回常规遍历——速度会掉到和 Windows 自带搜索一个量级,甚至更慢。

我那次的问题是第三个:那块盘是 exFAT,格式化的时候图省事选了兼容性更好的格式,结果就是 Everything 的优势直接没了。后来我把项目盘换成 NTFS,秒出结果。

这里给个明确的取舍:如果你经常在移动硬盘里翻文件,别指望 Everything,直接用 DocFetcher 建内容索引更靠谱;如果你 90% 的时间都在固定盘里找东西,那 exFAT 的问题一辈子遇不上,不用改。

要搜"内容"而不是"文件名",思路完全不一样

文件名搜索和全文检索是两套东西。前者靠文件系统元数据,后者必须真的把文件内容读出来、切词、建倒排索引。后者的代价是:

  • 第一次建索引很慢。我给一个 12 万文件、约 60GB 的素材库建 DocFetcher 索引,跑了将近 50 分钟。这期间 CPU 会一直有个核在转。
  • 索引占比不小。那次建完,索引目录大概是 1.2GB。
  • 增量更新是自动的,但要给它时间。新加的文件不会立刻能搜到,得等它扫到那个目录。

我的做法是把索引范围收紧:只索引素材库和文档目录,不索引整个盘。宁可搜的范围小一点,也不要它建一晚上。

顺带说一句,开源方案里还有个 Recoll(GPL-2.0),内容索引能力比 DocFetcher 更强,能接 xapian 做复杂的布尔查询,但它的界面是 Qt 风格、配置项偏多,我最后没留下它——不是它不好,是我用不上那些高级查询,DocFetcher 的"选中目录→建索引→搜"三步更省心。

我用 EasyFind 试了三天,最后卸了

GitHub 上有个叫 EasyFind 的小工具(MIT 许可,仓库在 `Malusdarling/EasyFind`),当时我是被"极致轻量"这个点吸引的,装上试了三天。结论是:适合小范围、固定目录的快速查文件,不适合我这种几十万文件的场景。

第三天下午,我在一个 8 万文件的目录里搜关键词,界面直接卡住不动了,任务管理器显示它在全量读目录。那一刻我想明白了:轻量和全量搜索这两个目标,在文件量大的时候是冲突的。它没做索引,所以每次都要现扫,文件一多就露馅。

我不是说它不能用。如果你的目标目录只有几千个文件,它启动快、不占内存,比装个 Everything 更清爽。但如果你的目录超过几万个文件,直接跳过它。

怎么防止再犯:把"找文件"这件事提前

搜了半天找不到文件,本质上是"存的时候没想好"。我后来改了几个习惯,找文件的时间至少少了一半:

  • 按"年/月/用途"三层分目录,而不是按"临时/重要/归档"这种主观维度分。主观分类过半年你自己都不记得当时怎么想的。
  • 文件名里带上日期和来源,比如 `2026-08-抖音指数-导出.csv`。Everything 搜文件名是毫秒级的,文件名写清楚,比任何全文检索都快。
  • 给每个项目的根目录放一个 README,写清楚这目录里有什么。半年后你自己回来,看 README 比搜索快。

这些是免费的,而且不依赖任何工具。工具的定位应该是"兜底",不是"主力"。

常见问题

Everything 是不是会一直占内存?
常驻进程一般在 30–80MB,取决于文件数量。40 万文件大概 60MB 上下,我这边开一天没感觉。它占的主要是内存不是 CPU,除非你正在打字搜索。

能不能搜压缩包里的文件?
Everything 不开源版不行。DocFetcher 支持 zip、7z 等格式的穿透检索,但需要额外的解压库,建索引会更慢。

中文搜索准不准?
文件名搜索(Everything)中文没问题。内容检索(DocFetcher)中文需要它自带的词库切词,效果一般——搜"采集工具"这种词能中,搜"怎么把数据采下来"这种口语化长句基本没戏。这是全文检索的通病,不是某个软件的问题。

这些工具会联网吗?
Everything、DocFetcher、fzf 都是纯本地工具,不联网、不上传。EasyFind 我也没看到联网行为。这点可以放心。

要不要都装?
不要。先装 Everything 用一周,如果你发现自己从来没搜过文件内容,那 DocFetcher 别装。工具装多了,反而记不住该用哪个。

相关阅读

分享到:

本文链接:https://www.biyeyuanma.cn/post/227.html

服务热线

加我微信

加我微信