苹果微软都没做好搜索这件最基本的事

我家两台机器,一台 Windows,一台 MacBook。

每次重装系统,第一批装的软件里一定有一个搜索工具。Win 那台装 Everything,Mac 那台装 Raycast。

做开发十几年,认识的开发同行十有八九都这么干。

Win 和 Mac 是两个完全不同的操作系统,连搜索的底层架构都长得不一样,但开发者在两边的反应一致,装机第一件事是把 OS 自带的搜索绕开。 因为自带的功能太难用了!

如果微软自带的搜索做得足够好,Everything 不会有市场。如果 Spotlight 做得足够好,Alfred 和 Raycast 也不会有市场。

那这两个生态到底各自做错了什么?第三方又分别是怎么钻进这些缝隙里的?

最近翻了翻这两边的搜索底层架构,发现两个 OS 的失败方式完全不同,第三方填补缝隙的方式也完全不同,但市场结果却惊人一致。


先说 Win 这边。

Win 自带搜索的问题不复杂,慢、索引不全、还经常给你弹网页。

慢是因为它的搜索服务 Windows Search 走的是后台索引模式,初次扫一遍硬盘要小时级,而且索引常年容易出问题。索引不全是因为系统会自动跳过很多目录(比如 Program Files 的子目录),你想要它索引得手动加。

最离谱的是 Win 11 把 Bing 塞进搜索结果,你按 Win 键想找本地的一个 PDF,跳出来一堆网页推荐,本地文件还在最下面。

Everything 这个东西就是冲着这个缺口来的。作者是个独立开发者叫 David Carpenter,公司叫 voidtools,连续做了快 20 年。整个程序的核心逻辑加起来不到 200 行 C 代码,一秒索引十几万文件,输三个字符瞬时返回。

它能做到这个速度,靠的不是更聪明的算法,是作弊

它根本没有「搜索」这个动作。它干的事是直接读 NTFS 文件系统自己的总账本。

NTFS 是微软 1993 年随 Windows NT 一起出的文件系统,它内部维护一张表叫 MFT,全称 Master File Table,主文件表。咱们硬盘上每一个文件、每一个文件夹,都在这张表里有一条记录,记录里有文件名、大小、创建时间、修改时间、所在目录。

也就是说,操作系统自己就维护了一份「全盘文件名索引」,只不过它用这个索引是为了管文件读写,不是为了给用户搜东西。

Everything 干的事,就是把这张表整个抄一遍到内存里。一台装了 12 万个文件的 Win 系统,抄完只要 1 秒。然后你输入搜索关键词,它就在内存里这张表上做字符串匹配,0.3 秒返回结果。

那文件如果有变动呢?

NTFS 还有第二个东西叫 USN Change Journal,更新序列号变更日志。任何文件变化都会在这条日志里追加一条记录,时间戳、变化类型、文件路径全都有。Everything 在后台监听这条日志,有变化就更新内存里的那张表。

整个机制干净到让人怀疑微软是不是故意留的口子。事实上,就是故意留的。微软在 NTFS 设计之初就把 MFT 和 USN 当作公开 API 暴露出来,文档齐全,调用方法白纸黑字写在 MSDN 上。

Everything 不是发明了什么新技术,它只是把微软早就放在桌面上的钥匙捡起来用了。它能成功,是因为微软自己用这把钥匙做出来的 Windows Search 太烂,而 Everything 把同一把钥匙用在了一个极度聚焦的场景上,只搜文件名、不搜内容、不搜邮件、不搜网页,反而做到了极致。

Everything 的成功公式很简单,单一场景做到极致。


那 Mac 这边呢?

Spotlight 的问题跟 Win 自带搜索完全不是一回事。

Spotlight 不慢吗?也慢,初次索引一块 1TB 硬盘要小时级,新版 macOS 升级完那两天,活动监视器里 mds_stores 经常吃满一个核。

但 Spotlight 真正让人受不了的,是

按 Cmd+空格弹出来,输个文件名,等半秒,给你返回邮件正文匹配、词典词条、Siri 建议、应用、网页历史、备忘录、提醒事项、日历事件,文件本身排第七位。你想找昨天那个 PDF,得在十几条不相关的结果里翻。

为什么会这样?因为 Spotlight 的架构跟 Win Search 完全不同。

Spotlight 后台跑着一组进程,主进程叫 mds,全称 metadata server 元数据服务器,下面挂着一群叫 mdworker 的子进程,再下面是一组叫 mdimporter 的插件。

这组进程干的事不是抄文件系统的账本,而是逐个文件解析内容

你硬盘上每多一个文件,mds 就唤起对应类型的 mdimporter 去把这个文件打开、解析、提取关键字段,比如 PDF 的标题作者摘要、邮件的发件人正文、图片的拍摄日期 GPS、源代码的函数名注释,然后把这些字段写进一个叫 .Spotlight-V100 的隐藏文件夹里建立倒排索引。

每种文件类型都有一个对应的 mdimporter 插件,系统自带几十个,第三方应用还能注册自己的。

这套机制功能上比 Win Search 强得多,是个完整的语义搜索引擎。它能搜文件内容,能搜邮件正文,能搜词典定义。

但代价是排序混乱,因为返回结果太杂。

还特慢,因为每个文件都得打开解析。

还脏,因为新版 macOS 不停往里塞 Siri 建议、Apple Music 歌词匹配这些东西,搜索结果列表越来越长,文件本身越来越靠后。

那 Alfred 和 Raycast 是怎么钻进这个缝隙的?

很多人以为它们是「更好的 Spotlight」,其实不是。它们走了一条完全不同的产品路线。

Alfred 第一版 2010 年发布,Raycast 第一版 2020 年发布。它们都没有去重新做一个文件搜索引擎,而是在 Spotlight 之上做了三件 Spotlight 自己没做或做不好的事。

第一件,应用启动 cache 自己维护。Alfred 文档里写得清楚,它对常用应用单独建了一个独立索引,所以你按 option+空格输个 chr 想启动 Chrome,0.05 秒出结果,比 Spotlight 还快。

第二件,命令面板范式。这是 Raycast 真正改写游戏规则的地方。它不只是个搜索框,是个生产力枢纽。你在同一个面板里能查计算器、剪贴板历史、窗口管理、日历事件、Notion 页面、AI 对话,全部用键盘完成。这套范式是从 VSCode 的命令面板继承来的,Spotlight 至今都没这么玩儿。

第三件,插件市场。Raycast 现在有上千个第三方扩展,从管 Docker 容器到操作 Figma,全都集成进同一个搜索框。Alfred 的 workflow 体系也很成熟,但门槛高一些。

至于文件搜索这件事本身,Alfred 用的是 mdfind 命令包装,本质走 Spotlight 索引。Raycast 在 macOS 上的「搜索文件」功能官方文档明确说用的是 Spotlight 索引检索结果。

所以这两个工具在文件搜索的速度上限被 Spotlight 卡得死死的,但它们根本不在这个维度上跟 Spotlight 较劲。它们抓住的是 Spotlight 完全没做的另一片市场,把启动器扩展成生产力枢纽。

Alfred 和 Raycast 的成功公式跟 Everything 完全不同。


这么一对比,两条路线就清楚了。

Everything 走的是「单一场景做到极致」,靠绕开 OS 自带、直接读文件系统底层这条作弊路线,做到了 OS 自己都做不到的速度。

Alfred 和 Raycast 走的是「功能扩张到生产力枢纽」,靠借力 OS(Spotlight 索引)+ 自建应用 cache + 命令面板 + 插件市场,把搜索框从一个工具变成了开发者的桌面操作中枢。

技术路线相反,产品路线也相反,但都成功了。

为什么都能成功?因为原生 OS 都失败了,且失败的方式各不相同,当然留出的市场缺口也不同。

Win 自带搜索失败在「性能差 + 索引不全 + Bing 干扰」,留出的缺口是「极致快速的本地文件名搜索」这个具体场景。Everything 抓住了。

Spotlight 失败在「结果杂乱 + 排序混乱 + 没有命令面板」,留出的缺口是「干净统一的快速操作枢纽」这个抽象场景。Alfred 和 Raycast 抓住了。

两个 OS 犯的错其实可以归到同一句话上,它们都试图把"搜索"做得太通用,反而失去了核心场景

Win Search 想搜本地文件、Bing 网页、应用、设置、Office 365 全套,结果搜个本地 PDF 跳出来网页推荐。Spotlight 想搜文件、邮件、词典、Siri 建议、Apple Music 歌词、网页书签,结果搜个本地文件返回十几条不相关的杂项。

通用搜索的代价就是没有任何一个场景被做到极致。第三方反过来抓住其中一个具体场景做透,自然就赢了。


当然了,话说回来,OS 自带搜索想做"通用"是有合理性的。

普通用户不分什么文件名搜索和语义搜索,他们想要的是「我输个词,电脑帮我找到我需要的东西,不管它是文件、邮件还是 Siri 建议」。从这个角度看,Spotlight 的设计逻辑是对的,Win Search 把 Bing 塞进来也是对的。

但问题在于,OS 自带产品要服务全体用户,第三方产品可以只服务特定人群

开发者人群对搜索的需求跟普通用户不一样。咱们不需要 Spotlight 帮我们搜邮件,邮件直接在 Mail 里搜更精准。咱们不需要 Win Search 帮我们搜 Bing 网页,浏览器开着呢。咱们要的就是输几个字符,0.3 秒里把那个文件或者那个命令调出来。

OS 自带产品永远没法只服务开发者,因为它要对所有人负责。第三方产品没这个负担,所以 Everything 可以坚持只搜文件名 20 年不变,Raycast 可以专心做开发者的命令面板。

Everything 卖的不是技术,是「我比微软更专心听开发者的话」。Raycast 也同样如此。

两个产品都赚到了同一笔钱。


如果哪天微软真的把 Win Search 做对,Everything 会消失。如果哪天苹果真的把 Spotlight 做对,Alfred 和 Raycast 也会消失。

但现在看起来,这一天遥遥无期。微软去年又往 Win Search 里塞了更多 Copilot 和 Bing 入口,苹果今年的 macOS 升级里 Spotlight 又多了一组 Apple Intelligence 建议。两家都在往「更通用更全」的方向走,第三方反而成为最大受益者。


OS 大厂越想讨好所有人,搜索就做得越烂。独立开发者就只服务开发者,反而能成功。

这是个结构性错配,不是哪家公司的失误,所以也不会自己结束。

署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)
位旅人路过 次翻阅 初次见面