Hugo 的搜索逻辑
|
|
1. 核心技术栈
- Hugo (框架):这是一个极速的静态网站生成器。该博客使用了名为 Hugo Theme Stack 的主题(由 CaiJimmy 开发),这是目前 Hugo 社区非常流行的一款卡片式主题。
- Fuse.js (搜索引擎):这是一个轻量级的 JavaScript 模糊搜索库。它不需要后端服务器支持,非常适合静态网站。
2. 搜索原理:它是如何工作的?
由于静态网站没有数据库(如 MySQL),它的搜索通常是“客户端本地搜索”:
- 索引生成 (Build Time):当你(博客作者)运行
hugo命令构建网站时,Hugo 会根据配置文件生成一个名为index.json的文件。这个文件包含了你所有文章的标题、内容摘要、标签和链接。 - 数据获取 (Client Side):当访问者在浏览器中点击搜索按钮时,浏览器会异步下载这个
index.json文件(通常在首次打开搜索框时)。 - 模糊匹配:当你在搜索框输入关键词时,Fuse.js 会在这个 JSON 数据中进行实时匹配。由于是模糊搜索,即使你拼错了一两个字母,它通常也能找到相关的文章。
- 结果展示:搜索结果会即时显示在页面上,整个过程都在你的浏览器里完成,不需要请求服务器。
3. 为什么选择这种方式?
- 零成本:不需要搭建后端服务器或支付 Algolia 等第三方搜索服务的费用。
- 速度快:对于中小型博客,JSON 文件体积不大,搜索体验非常流畅。
- 易于部署:完全兼容 GitHub Pages 等静态托管平台。
客户端本地搜索的主要缺点是什么?随着文章增多,索引文件(index.json)会变大,增加首次加载的流量消耗。
4. 静态搜索的“天花板”
当文章达到几千篇时,index.json 可能会达到几 MB 甚至更大。这时候作者通常会采取以下优化:
- 分片加载:只加载标题索引,不加载全文索引。
- 切换方案:改用 Pagefind(只下载搜索结果相关的碎片文件)或者 Algolia(真正的云端搜索服务)。 目前该博客的量级,使用 Fuse.js 是非常丝滑的。
自定义搜索引擎
可以把这个博客集成到 Chrome 或 Edge 的地址栏中,实现“一键检索”:
- 打开浏览器设置 -> 搜索引擎 -> 管理搜索引擎和网站搜索。
- 在“网站搜索”里点击“添加”:
- 搜索引擎:Teaize Blog
- 快捷字:
tz(或者任何你喜欢的简写) - 网址:
https://teaize.github.io/search/?keyword=%s
- 使用方法:以后你只需在浏览器地址栏输入
tz+空格+关键词,敲回车就能直接看到搜索结果。
![[Pasted image 20251229165216.png]]
Anki 学习闭环
你平时在复习 Anki 卡片时,如果突然对某个知识点感到模糊,或者想看更多案例,手动去搜非常打断思路。
- 实现方式:在 Anki 卡片模板中加入“深度阅读”链接。
- 代码示例:
|
|
价值:复习时如果卡住了,一键跳转到博主的深度笔记中查缺补漏,形成“记忆 - 理解 - 应用”的闭环。