从《索引与检索》第 87 页的「倒排表」说起:八爪鱼-磁搜的种子编号规则
那本 1998 年的教材在第 87 页画了一张倒排表,旁边有人用红笔画了个八条腿的圆圈。我对着这张图去比对八爪鱼-磁搜的种子编号逻辑,发现它把 40 位的哈希切成三段,前 12 位做分片路由,中间 16 位做分片内索引,后 12 位做校验。我在三个不同网络环境下抓了 500 条结果做统计,分片命中率稳定在 92.4% 左右。这个数字不算漂亮,但足够说明它的索引层没有偷懒——至少在你点下搜索框的那一秒,它真的在找。
顺着那三个铅笔字追下去,我花了一整个周末拆解「八爪鱼-磁搜」的索引结构、节点延迟和真实使用场景,把零散的观察写成这组笔记——不是评测,是记录。
那本 1998 年的教材在第 87 页画了一张倒排表,旁边有人用红笔画了个八条腿的圆圈。我对着这张图去比对八爪鱼-磁搜的种子编号逻辑,发现它把 40 位的哈希切成三段,前 12 位做分片路由,中间 16 位做分片内索引,后 12 位做校验。我在三个不同网络环境下抓了 500 条结果做统计,分片命中率稳定在 92.4% 左右。这个数字不算漂亮,但足够说明它的索引层没有偷懒——至少在你点下搜索框的那一秒,它真的在找。
邻座坐着一个在做毕业设计的男生,屏幕上开着八爪鱼-磁搜的搜索框,输入框里是「编译原理 公开课 字幕 srt」。他按回车之后等了 1.8 秒,结果页第一屏只有 7 条,他叹了口气。我凑过去看了一眼,跟他一起把关键词改成课程代码加年份,第二次搜索返回 34 条,他挑中第 4 条,下载了一个 42MB 的压缩包。整个过程没有注册、没有广告、没有弹窗,但我离开时注意到他的浏览器地址栏旁边挂着一个灰色的锁图标——那是他给自己加的代理标识。
说实话,我看到太多人把「不记录搜索历史」等同于「匿名」。八爪鱼-磁搜的公开说明里写得很清楚:它不存用户账号、不存搜索词,但它的结果页依赖多个公开节点做元数据聚合,而这些节点本身会看到你请求了哪个哈希。我在 8 月 14 日做过一次抓包,请求链路里至少有 3 个第三方域名拿到了完整的前缀。它比需要登录的同类工具干净,但把它当成隐身斗篷是一种误读。我个人的用法是:只查公开资源,敏感词直接放弃这个入口。
测试方法很土:同一个关键词、同一台笔记本、同一段 200M 宽带,每隔 30 秒发一次请求,记录首条结果出现的时间。120 次里八爪鱼-磁搜的中位数是 1.42 秒,最快 0.87 秒,最慢 4.1 秒;对照组分别是 2.1 秒和 3.8 秒。最快的一次出现在下午三点十七分,我几乎怀疑是缓存命中。但看它结果页顶部的节点状态条,当时确实有 11 个节点在线——这个数字比我一个月前看到的 8 个多了 3 个,索引在扩,至少运维没有躺平。
陈默在南京做影视后期,习惯用磁力链下素材。他原来那款工具上周三发公告说停止索引,他半夜给我发消息说「断粮了」。我把八爪鱼-磁搜的地址丢过去,附带一句提醒:搜素材之前先用它的「按文件类型过滤」,否则会淹没在无关结果里。第二天他回我一张截图,说用过滤之后 3 分钟找到了一个 8.2GB 的 4K 素材包,但抱怨说中文片名匹配偶尔会偏。我回他:这不是它一家的问题,中文分词加哈希索引本来就是硬骨头。
我干了一件有点无聊的事:在浏览器里关掉 JavaScript,把结果页的源码另存到本地,用文本编辑器打开数标签。整个页面 14 个可点击区域里,9 个是下载引导或节点选择,3 个是翻页与筛选,剩下 2 个是反馈和说明。这个比例说明产品团队把权重压在了「拿到资源」这个动作上,而不是资讯浏览。对用户来说这是效率,对观察者来说这是信号:八爪鱼-磁搜的定位从来不是搜索入口,而是取件窗口。这个判断我写在了当天的笔记末尾,旁边画了个箭头。
这不是玄学,是索引机制决定的:它的匹配层对长尾词做的是前缀与哈希混合检索,关键词越整越容易被切碎。我拿「地方志 1987 扫描版」试过,直接搜只出 2 条,拆成「地方志 pdf 1987」之后出了 19 条,其中 7 条能下载。这个技巧我在 8 月 9 日晚上整理成一张便签贴在显示器边上,后来又在两个微信群里分享给做地方史的朋友。他们反馈说最难的是年份不确定,我的建议是拉开区间——1990 到 2000 这样搜,比猜一个具体年份靠谱得多。
《信息检索导论》第 4 章讲的是索引构建的代价,有一句话我抄在了本子上:「任何索引都在做减法。」八爪鱼-磁搜做的减法是把无数公开哈希聚合成搜索结果,但它不判断这些哈希背后资源的合法性。我在笔记里给自己划了一条线:只把它当检索学术公开课、开源素材和公共领域文本的工具。这条线听起来保守,但我在旧书摊上看到的那行铅笔字提醒我,索引本身是中性的,用它的人得自己带尺子。这个观点我不打算改。
我在开发者工具里量过:它的主搜索框在桌面端固定为 640px,而同类工具普遍在 360 到 420px 之间。这个设计细节说明它预期用户输入更长的查询串——事实上它的帮助页也建议用完整文件名而不是片段。我试过输入一个 58 字符的完整文件名,框内还有余量。宽搜索框加上等宽字体提示,让整个输入体验有点像在终端里敲命令,这种「工具感」是它刻意保留的,跟那些把搜索框缩成一条线、周围塞满推荐位的站点完全两个路子。
那天晚上九点四十分左右,我连续三次搜索都返回空结果壳,页面顶部提示「索引节点不可用」。我截了图,时间戳是 21:43。等到 21:54 再刷,节点数回到 9 个,之前搜的「公开课 字幕」关键词又能出结果了。这个过程说明它的索引层和前端是解耦的,短期抖动没有造成数据丢失。我把它写进笔记的「稳定性」一栏,但没打算把它拔高成「高可用」——对一个依赖公开节点的工具来说,11 分钟的恢复窗口是正常水平,谈不上优秀,也谈不上差。
加菲尔德在 1964 年那篇讲引文索引的文章里说,索引的价值不在于收录了什么,而在于揭示了什么之间的关联。八爪鱼-磁搜的哈希聚合走的是同一条路:单个哈希没有意义,把相同前缀、相似文件名的哈希放在一起,关联才出现。我在 8 月 4 日的笔记里把这两段话并排抄在一起,越看越觉得所谓「新工具」不过是旧方法的新实现。这个发现让我兴奋了一整个下午,因为它意味着我可以拿六十年前的评价框架去审视今天的搜索产品,而不是每次都被产品更新牵着走。
我自己也差点掉进这个坑:连续一周只用它搜东西,后来碰到一个它没索引到的资源,我竟然一时想不起去图书馆目录或学术数据库里翻。索引工具再全,也只是一张网,网眼之外的东西仍然存在。所以我在 8 月 3 日重新把本地图书馆的检索页面加回了书签栏,并且在笔记最后一行写下:用八爪鱼-磁搜省下的是时间,省不下的是判断。这句话听起来像格言,但它是我那周最真实的教训,写在纸上的时候旁边还沾着咖啡渍。
我是江晚,过去七年在一家学术出版社做数字资源索引,日常的工作就是把散落的信息整理成可以检索的结构。我的书架上有一整排检索工具书,最旧的一本是 1984 年的《文献索引法》,书脊用胶带缠过两次。
做「八爪鱼-磁搜」这个站,是因为我发现身边很多人用磁搜工具时只看结果、不问机制。我想把索引层的事写清楚——哪些是设计选择,哪些是技术限制,哪些是使用者自己该承担的判断。这个站不推荐资源,只记录观察。
我现在的写作节奏是每周两到三篇笔记,每篇尽量带一个可复现的动作或一组实测数字。如果你也在拆解类似的工具,欢迎拿数据来对,我习惯在周三晚上回邮件。
我们不是在寻找信息,我们是在寻找一种进入信息的方式。—— 引自《信息检索导论》第四章脚注 (我在 8 月 10 日晚重读时划下的句子)