网易首页 > 网易号 > 正文 申请入驻

不用数据库,PHP博客用1个JSON文件实现智能相关文章推荐:从硬编码到自动匹配的零维护方案

0
分享至

写博客的人都熟悉这个场景:文章底部放两篇"相关阅读",一开始手动挑两篇,后来文章多了就懒得维护,最后要么链到不相关的内容,要么指向404页面。一位开发者用纯PHP解决了这个问题——没有数据库,只有一个JSON文件。

他的博客所有内容都描述在一个posts.json文件里。每篇文章的slug、分类、标签都在里面。这些信息足够让程序自动算出哪些文章最相关。


硬编码链接的问题很典型。早期版本是给blog_footer()函数传一个数组,里面塞两个URL和标题。十篇文章还能管,五十篇就失控了。更麻烦的是,新发了文章也不会自动出现在相关推荐里,哪怕它明明更匹配。

posts.json的结构很简单。每篇文章一条记录,包含slug、标题、发布日期、分类、标签数组。这个文件本来就用在博客列表和站点地图生成上,顺手拿来做推荐也不费事。

算法设计直截了当。对每篇候选文章(排除当前这篇),按两个维度打分:共享标签每个加2分,标签是最精确的信号;同分类加1分,这是更宽泛的上下文线索。按分数降序排,同分取最新的,最后留前三。零分的直接过滤掉。

具体实现用了几十行PHP。先读JSON找到当前文章,提取它的标签和分类。然后遍历所有其他文章,array_intersect算标签交集个数乘2,分类相同再加1。结果存进数组,usort排序,分数高的在前,分数一样比日期。最后map一下输出URL和标题。

blog_footer()函数原本就接收$slug参数用来加载评论。现在加个逻辑:如果没传显式的相关文章列表,就自动调用上面的算法计算。老文章不用改,新文章自动生成推荐。

这个方案的限制很明显。标签质量决定推荐质量,如果作者打标签很随意,结果就乱。没有语义分析,"机器学习"和"深度学习"会被当成完全不同的东西,尽管人看来很相关。但对于个人博客,标签通常是认真打的,效果足够好。

更深层的问题是,为什么非得摆脱数据库?对一个小博客,MySQL是重量级的依赖。备份要管,迁移要管,版本升级要管。JSON文件直接用Git版本控制,部署就是一行scp。这种"足够好"的极简主义,在特定场景下比工业级方案更实用。

技术选型常陷入一种陷阱:用解决大厂问题的工具解决自己的问题。这位开发者的做法相反——先定义问题边界,再找最小可行的解法。相关文章推荐不需要协同过滤,不需要向量相似度,甚至不需要数据库。标签匹配加时间衰减,对个人博客已经够用。

代码里有个细节值得注意:排序时用了太空船运算符<=>,这是PHP 7引入的。按分数降序是$b <=> $a,同分比日期字符串用strcmp,也是降序。这种简洁的比较逻辑在旧版本PHP里要写好几行。

最终效果是什么?作者发新文章时,相关推荐自动更新。旧文章不用动,系统会找到新文章里最相关的那几篇。维护成本降到零,同时避免了硬编码的僵化。

这个案例的启示不在技术本身,而在问题定义。很多人看到"相关文章推荐"就想到机器学习、想到Elasticsearch、想到复杂的流水线。但回到本质,推荐的核心是"找到相似的东西"。如果标签体系足够干净,简单的加权匹配就能达到可用水平。复杂度和收益的平衡,是每个技术决策都要面对的。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
俄罗斯警告亚美尼亚若加入欧盟将招致和乌克兰一样的后果

俄罗斯警告亚美尼亚若加入欧盟将招致和乌克兰一样的后果

山河路口
2026-05-10 23:28:46
为什么不建议买网上十几块的衣服?看完感到后怕,可别贪便宜

为什么不建议买网上十几块的衣服?看完感到后怕,可别贪便宜

家居设计师苏哥
2026-05-04 11:39:03
他活埋近5000红军,逃往国外安享晚年,如今国内竟还有人纪念他!

他活埋近5000红军,逃往国外安享晚年,如今国内竟还有人纪念他!

兴趣知识
2026-05-08 00:23:54
终于回过味来了?美媒:中国正全国动员,歼36歼50生产超美国两倍

终于回过味来了?美媒:中国正全国动员,歼36歼50生产超美国两倍

说历史的老牢
2026-05-10 18:47:47
英超官方分析争冠形势:阿森纳最早下周一夺冠

英超官方分析争冠形势:阿森纳最早下周一夺冠

懂球帝
2026-05-11 19:12:33
村民劳作时被2米长,5斤重的眼镜王蛇咬伤,毒蛇蛇身被他当场斩断,他随即出现疼痛、头晕、乏力等症状,医院用13支抗蛇毒血清,救治3天3夜终于转危为安

村民劳作时被2米长,5斤重的眼镜王蛇咬伤,毒蛇蛇身被他当场斩断,他随即出现疼痛、头晕、乏力等症状,医院用13支抗蛇毒血清,救治3天3夜终于转危为安

观威海
2026-05-11 14:26:03
中吉乌铁路开工,俄提1520mm硬条件,中国一招化解堪称绝妙

中吉乌铁路开工,俄提1520mm硬条件,中国一招化解堪称绝妙

最终你成为了过客
2026-05-11 12:58:24
比利时将向乌克兰提供全部F-16战机

比利时将向乌克兰提供全部F-16战机

参考消息
2026-05-11 14:37:08
就在今天!一个前无古人的NBA纪录,被唐斯达成了

就在今天!一个前无古人的NBA纪录,被唐斯达成了

篮球大视野
2026-05-11 07:58:11
摊牌了!一则动态曝光周迅王骁的真实关系,与陈坤领证早真相大白

摊牌了!一则动态曝光周迅王骁的真实关系,与陈坤领证早真相大白

洲洲影视娱评
2026-05-10 21:08:46
伟大的10-4!火箭变身克鲁斯堡8冠王,历史第1人,超越台球皇帝!

伟大的10-4!火箭变身克鲁斯堡8冠王,历史第1人,超越台球皇帝!

刘姚尧的文字城堡
2026-05-11 07:37:31
村民被眼镜王蛇咬伤打13支血清 专家:我国尚无专门血清,可用抗银环蛇毒血清加抗眼镜蛇毒血清

村民被眼镜王蛇咬伤打13支血清 专家:我国尚无专门血清,可用抗银环蛇毒血清加抗眼镜蛇毒血清

封面新闻
2026-05-11 19:00:03
40岁的朱珠,终于等来了她的“大女主时刻”

40岁的朱珠,终于等来了她的“大女主时刻”

可爱小菜
2026-05-11 13:57:00
中国U17女足晋级亚洲杯四强、锁定世少赛资格

中国U17女足晋级亚洲杯四强、锁定世少赛资格

南方都市报
2026-05-11 22:39:19
禁烟令下的三重治理失衡:四川最严禁烟与放任低速车黑车的荒诞现实

禁烟令下的三重治理失衡:四川最严禁烟与放任低速车黑车的荒诞现实

天气观察站
2026-05-11 17:52:53
50岁李小冉机场吃面,褪去滤镜才懂,普通人的衰老藏不住

50岁李小冉机场吃面,褪去滤镜才懂,普通人的衰老藏不住

梦想的旅途照进现实
2026-05-09 18:40:12
女子车祸住院遭男医生侵犯,录下全过程并主动反问,为何不立案

女子车祸住院遭男医生侵犯,录下全过程并主动反问,为何不立案

一丝不苟的法律人
2026-05-11 11:45:38
职称要倒查十年了

职称要倒查十年了

新浪财经
2026-05-10 14:14:04
出乎预料,特朗普修改访华计划,中方官宣行程延长,必须多待一天

出乎预料,特朗普修改访华计划,中方官宣行程延长,必须多待一天

黑鹰观军事
2026-05-11 18:19:32
97年和女同事出差,宾馆只剩一间房她白我一眼:你敢乱动我就报警

97年和女同事出差,宾馆只剩一间房她白我一眼:你敢乱动我就报警

千秋文化
2026-05-08 10:18:54
2026-05-11 23:11:00
字节漫游指南
字节漫游指南
有态度网友ytd
3611文章数 40关注度
往期回顾 全部

科技要闻

黄仁勋:你们赶上了一代人一次的大机会

头条要闻

重庆一57岁女医生驾奔驰酿车祸 操作不当致2死6伤

头条要闻

重庆一57岁女医生驾奔驰酿车祸 操作不当致2死6伤

体育要闻

梁靖崑:可能是最后一届了,想让大家记住这个我

娱乐要闻

“孕妇坠崖案”王暖暖称被霸凌协商解约

财经要闻

宗馥莉罢免销售负责人 部分业务将外包

汽车要闻

吉利银河“TT”申报图曝光 电动尾翼+激光雷达

态度原创

艺术
本地
数码
房产
公开课

艺术要闻

陆抑非写竹,笔力遒劲

本地新闻

用苏绣的方式,打开江西婺源

数码要闻

追觅推出Y-Wind31系列空调:送风距离7.2m、APF5.26能效

房产要闻

产业赋能教育!翰林府与北师大的这场签约,绝不那么简单!

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版