本文最后更新于 2026年5月22日。
Hugo 本身确实没有传统意义上的 SQL 数据库(如 MySQL),但它完全可以支持搜索,而且速度依然极快。
WordPress 的搜索是每次用户输入关键词,服务器就去执行一条 SELECT * FROM posts WHERE … 的数据库查询。
而 Hugo 作为一个静态网站生成器,实现搜索主要通过以下两种完全不同的逻辑:
🚀 方案一:纯前端客户端搜索(最轻量、最推荐)
这是 Hugo 网站最常用的做法。在编译网站时,Hugo 会把所有文章的标题、标签、甚至全文内容,打包生成一个非常小的 JSON 文件(类似一个微型本地数据库)。
当读者在你的网站搜索时,浏览器会下载这个 JSON 文件,并通过 JavaScript 直接在用户的手机或电脑本地进行匹配。
目前有几个非常成熟的 Go/JS 库来实现这个功能:
-
Fuse.js / Pagefind:目前最火的方案。尤其是 Pagefind,它非常智能,会自动把你的静态网页切成碎片索引,哪怕你有几千篇文章,搜索也是瞬间完成(毫秒级),而且对中文支持极好。
-
Lunr.js:另一个老牌的客户端搜索引擎,支持简单的语义匹配。
💡 优点:完全不需要服务器装数据库,零服务器资源消耗,速度快到飞起。
⚠️ 缺点:如果你的网站有几万、十几万篇文章,这个 JSON 索引文件会变得很大,用户第一次加载搜索时会比较耗流量。
☁️ 方案二:第三方/云端托管搜索(适合超大文章量)
如果你的内容极其庞大,或者想要像 Google、百度那样支持高级的智能错别字纠正、分词搜索,你可以把“搜索数据库”外包出去:
-
Algolia:全球最著名的 API 搜索服务。Hugo 有现成的插件,每次你更新文章,它会自动把内容推送到 Algolia 的云端。用户搜索时,直接向 Algolia 发送请求并展现结果。免费额度对个人博客完全够用。
-
Meilisearch:如果你想自己掌控数据,可以用 Go/Rust 部署一个轻量级的 Meilisearch 服务作为你的独立搜索数据库,Hugo 与它通过 API 联动。
🛠️ 怎么在 Hugo 里用起来?
你完全不需要自己从零写代码。现在的 Hugo 热门主题(比如 Blowfish, PaperMod, Stack 等)基本都内置了搜索功能。
你通常只需要在配置文件 hugo.toml 里简单地开启一个开关:
Ini, TOML
[params.search]
enable = true
type = "pagefind" # 或者 fuse
网站编译好后,搜索框就自带了,用起来的体验和 WordPress 没有任何区别,甚至因为不需要请求后台数据库,搜索框通常是边输入边实时出结果(Instant Search),体验反而更好。