一个搜索框有多少门学问?

2026-10-04 约 8 分钟 3,018 字 Konwk

一个搜索框,拆开看只有三样东西:一个图标、一行输入、一个按钮。

但把它真的做出来你会发现,这三样东西背后站着一整排学科:爬虫、分词、索引、排序、反爬、限速、备份、性能、多语言、运维、安全、合规……这不到两个月,我做的事基本上就是把这些门一门一门地补上。

丑话先说在前面:这个项目基本上是全 AI 开发的,我不会写代码。文案和删减是我自己改的,因为 AI 写东西太啰嗦、废话太多。所以下面这些事,一半是我自己想到的,一半是 AI 帮我校错的。

起因:到处都找不到,那就自己做一个

一开始我想要的特别具体:找几个个人网站。

我先去 B 站搜,没几个。又去看「博客录」那类站点收录站——说实话难用得让人看不下去,那个 UI 我是真的一眼看不过去。最后我想:国内外总有「个人网站搜索引擎」这么一个分类吧?结果翻了一围,竟然真的没有。勉强有几个,要么难用,要么连中文都不支持。

那行,我自己做一个。

第一步不是写代码,是定方案:界面上走直角、极简那一路(因为我实在受不了那种花里胡哨的目录站),再把 AI 那套「推荐位抽选」的想法揉进去。有了雏形之后,我在后台导入了那份公开列表——开头就是这样,一份别人整理好的清单,加上我自己的一个搜索框。

第一版:朋友说「竟然还行」

第一版做出来我拿给朋友看,他说了一句:「哎,竟然还行啊,你看这里面的网站都好牛逼。」

但问题马上就来了。

那会儿我对每个站只做了一件事:爬一遍、排除死链、抓个图标、把标题和描述更新到最新。所以:

  • 收录量太少——翻几页就到底了,什么都搜不到;
  • 搜索框基本是个摆设——它就只是拿关键词去比字符串,跟「搜索」两个字差得远。

一句话:骨架有了,但里面是空的。

转折:从友情链接开始

真正的转机特别偶然。我和朋友一起翻那些站的时候,发现了一件事:很多个人网站都有「友情链接」这一栏。

两个人当场就想到一块去了——那是不是可以做个爬虫,顺着这些友情链接自动爬,爬到的站再顺着它们的友链继续爬,像滚雪球一样滚下去?

做出来一试,收录量一下就上来了。这个方法一直用到现在,也就是今天这个爬虫的主要工作原理:从一个站出发,顺着友链把整张「人写给人」的网铺开——而不是去追那些大站。

牛马蛇神:收录一上来,麻烦也来了

友链爬虫把收录量拉起来之后,新的问题比收录量更烦:收得太杂了。

什么牛马蛇神都进来了。所以那段时间我们一直在做两件事:筛选——机器筛一遍,再人工过一遍;以及各种前端优化,尤其是手机版。

手机版那阵子我印象太深了。经常就是一个按钮怎么都放不到该在的位置上,我对着屏幕骂 AI:操你妈个逼。

主页也是重做过好几轮的。先是研究主页到底怎么摆,接着去研究 SEO 到底怎么算。说实话,现在这套排序对我来说已经变成半个黑盒了——我自己都不太清楚它是怎么运作的。

搜索:分词、索引、权重

搜索这块的优化是更后面才做的,大概是半个月到一个月之后了。因为前期都在忙着把爬虫和筛选取补好。

我记得主要就三件事:分词、索引、权重。

分词解决的是中文。英文有空格,程序知道一个词到哪儿结束;中文没有。「个人博客」四个字连在一起,程序并不知道你要的是「个人」+「博客」,还是别的什么切法。最后的解法是把中文两个字一组切开——「个人博客」切成「个人」「人博」「博客」,「博客小站」切成「博客」「客小」「小站」,只要两边都出现了「博客」,就能对上。

索引解决的是速度。同样是这套两字分组的思路,交给数据库原生去做,同一批词跑新旧两套,结果条数一模一样——摄影 2256 条、音乐 3787 条、创造力 67 条,一条不差,而单次查询从一秒多降到几毫秒。

权重的核心想法是我自己定的:相关排第一。搜索词整串出现在标题里的最靠前,其次是只出现在描述或域名里的,再按命中的词数和稀有度分。点击量和新鲜度都给封顶——它们只能在相关度差不多的时候起作用,永远翻不了盘。

这套权重具体怎么写是 AI 帮我落的代码,但「什么该排前面」是我想的。这一点对我很重要——见后面那节。

后来还补了一件事:早期只要沾上搜索词里的一小段碎片就出结果,乱打一串字也满屏东西。加了一条硬门槛——多词搜索必须命中至少两个词。改完之后「阿斯蒂芬阿斯顿」从 31 条变 0 条,而「读书笔记」「服务器」一条都没少。

还有就是我自己提出来的:我想搜一个站——给梁文峰打分的那种,名字就叫「滑动变祖器」,取自「滑动变阻器」的谐音,特别贴切。结果搜不到。

所以我顺手把错别字、谐音的处理一起做了:搜不到的时候给一行「您是不是想找」,但不替用户改——点不点,他自己决定。

顺带 那个站挺有意思:DeepSeek 之前涨价的时候,它给梁文峰打的分直接掉成了「小南梁」;最近发了 V4.1 Flash,还小降了一波价,评分又升回去了,成了「梁神」。

两次差点没的

做这个项目最惊险的都不是代码,是运维,而且两次都跟「数据只有一份」有关。

第一次:我在本地调完,顺手把整个目录传上服务器——把本地那个「模拟数据库」一起带了上去,直接覆盖掉服务器上唯一一份真数据。那次丢了十几个用户的资料,永久回不来。

第二次更离谱:我给数据库做备份,但备份文件就放在服务器自己身上。后来运营商线路坏了一整天,网站跟着死了一整天,备份和原数据一起失联。那天我什么都做不了。

第二次之后我就上了异地热备:每天自动打包,本地留几份,再自动推到另一台不同机房的机器上。数据只有一份,就等于没有。

一天三十万次的「访客」

还有一段时间,网站流量莫名其妙地爆了。我第一反应是「来人了」,甚至去把服务器升级了一档。

结果排查下来差点气笑:根本不是人,是 ChatGPT、Facebook 那些 AI 的爬虫——一天三十万次请求,每秒都在下载我站里的东西,稳定吃掉一百多 KB/s,差点把服务器干冒烟。

先上的方案是套一层 CDN,但没什么用——主要是它自带的访问量统计根本不准,我连谁在打我都看不清。最后干脆和 AI 一起自己写了一套识别 + 拒绝的东西:按用途分流——抓语料去训练的,入口直接拦;「用户让 AI 读这一页」和正常的搜索引擎,放行;只扫站做排名数据的采集器,也拦。

门面:多语言、邮件、证书,和一件还没做完的事

对外的部分一样要打磨。

多语言:中英日三套界面,每个网站的标题和简介都有三个语言版本。这里最容易出的错不是翻译,而是「键没对齐」——少配一个,页面上就会直接显示键名,所以每次改文案都要拿脚本把三套语言包对一遍。

邮件:注册验证、找回密码都要发信,所以邮件系统也得自己搭。这块的体验就是两个字:折磨。一是垃圾邮件天天往里灌;二是机房封了发信的端口,只能绕走 IPv6;三是很多老牌邮箱厂商压根不支持 IPv6 收信——现在好像只有 QQ 邮箱能收到,别的我真不知道了。

证书:有一次发现 www 开头的地址报证书不匹配——因为签证书时只签了主域名,子域一直靠前面的 CDN 遮着,直到直连才暴露出来。补签之后就正常了。

再往上,是产品层面的东西。我给收录的站做了一套质量评估,只做三件事:创造力、表现力、实用性——不输出对外分数、不给网站贴优劣标签,只用来让排序更偏「内容本身值不值得读」,而不是「谁的域名更权威」。目标只有一句话:让那些没人读过的深思,有机会被读到。

最早的版本想用「页数」衡量创造力,结果一看榜就发现:工具型、服务型的站被系统性低估了(它们本来就页面少)。后来才改过来——规模要看作者自己公开的站点地图,而不是「我爬到了多少」。还有一条现在写死在原则里:技术实现不计分。用不用框架、有没有压缩,这些在 AI 时代一句话就能生成,没有区分度;反而是一个全手写、不用框架的老站,更可能是真人在一个字一个字地写。

支撑我一直改下去的,是两次很具体的经历:一次搜「创造力」,翻到一篇讲《绝非天赋》的长书评,写得很好却几乎没人看过;另一次搜到一篇学术论文的解读,发在个人主页上,浏览量还不到一百。这类内容如果按「权威度」排,永远排不到前面;但如果按「内容本身值不值得读」排,它们其实很好。

关于 AI:它不是替我做,是把我想的放大了

最后说点我自己真正的看法。

这个项目基本是 AI 开发的——我自己是不会写代码。处理文案和删减是我自己改的,AI 写东西太啰嗦。

我不认为 AI 会让人丧失创造力。我认为 AI 是创造力的放大器。我脑子里有一个很清楚、但说不清怎么实现的东西(比如「吧这个按钮放在左边」「搜索相关永远排第一」),AI 把它变成了真的能跑的东西。没有它,这个想法大概永远只会停在一句「要是有个搜索框就好了」。

写在最后

现在这个站我自己也在用。说实话,如果拿它当主力的搜索引擎,我是不满意的——平时我要找东西,更多还是翻收藏夹、翻 B 站。

但如果只是找个人网站,那它对我来说已经非常满意了。

如果你也在做自己的东西,我的经验就一句:不用一开始就会所有门。先把它跑起来,剩下的门会自己找上门来。

欢迎来 konwk.com 搜两下——如果搜出来的东西答非所问,记得回来告诉我。

2026-10-06 · z小白kon