影视网站接入meilisearch有感

背景

一直使用的mysql读, gorm来进行搜索检索, 因为"相关影片"的内部检索频率巨高, 前端搜索我想新增"模糊匹配", "中文符号的判断", "搜索建议"等, 想到了前几天抖音看的meilisearch, 虽然一直知道有这个工具, rust编写的, 但是实际自己没有用过.

于是在claude code的帮助下, 我给 https://freedvd.cc 的内部检索, 外部搜索等添加了meilisearch.

大概方法

这个网站很简单, 就两条线, "影视作品", "人物". 人物包含导演和演员.

影视作品大概在15.8万条数据, 人物4.3k左右, 总体数据量不大.

我先构建索引, 然后重构各个搜索检索函数, 移植到meilisearch去, sql作为备用.

首先是空数据全量索引, 然后每个小时增量索引, 凌晨1点全量同步.

然后重构搜索方法, 统一为一个函数, 各个功能通过传参来进行不同的搜索功能.

这个方法很好, 函数统一, 修改方便, 然后我就把人物搜索方法也改了.

成果

meilisearch的占用很低, 效率很高, 一般busy time在149µs-300µs. 比原来的go查数据库要更快些.

搜索建议很有意思, 比如我搜"新奥特曼", 可以匹配待选的"新 ·奥特曼", 更方便找到自己想要的了.

"相关影片", 我从原来分别先查演员数据, 再查id, 查影视作品, 改成直接拿演员名字去查影视作品, 少了多余步骤, 再也不怕抓取了.

不仅效率高, 还重构了很多之前cursor写的多余逻辑, 多个函数整合, 代码少了几百行, 以后修改维护也更清晰.

吐槽

vibe coding的乱逻辑是真的多, 必须告诉它具体的各个函数有什么功能, 怎么勾连, 要什么接口, 前端的主题(写在claude.md根本没啥用), 等等, 不然就是一团糟, 功能重复, 多余逻辑, 步骤混乱, 都是避免不了的. 虽然也许能跑, 但是别谈效率和可维护度了.

meilisearch不支持LIKE, 多词还需要转换成词组, 有点奇怪.