在 mdBook 中启用中文搜索

方琉璃 Lv3

被 Mdbook 灾难性的中文搜索支持逼疯了,遂写此文。

首先介绍一下什么是 mdBook:

mdBook 是一个命令行工具和 Rust crate,用于使用 Markdown 创建书籍。

它的输出类似于 Gitbook 等工具,非常适合创建产品或 API 文档、教程、课程材料或任何需要干净、易于导航和可自定义的演示文稿的内容。

但是 mdBook 的搜索功能默认不支持中文! 下面的教程将会简述如何让 mdBook 支持中文搜素。

首先,在assets目录下创建一个elasticlunr.js:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/**
* @see https://github.com/HillLiu/docker-mdbook
*/
window.elasticlunr.Index.load = (index) => {
const FzF = window.fzf.Fzf;
const storeDocs = index.documentStore.docs;
const indexArr = Object.keys(storeDocs);
const ofzf = new FzF(indexArr, {
selector: (item) => {
const res = storeDocs[item];
res.text = `${res.title}${res.breadcrumbs}${res.body}`;
return res.text;
},
});
return {
search: (searchterm) => {
const entries = ofzf.find(searchterm);
return entries.map((data) => {
const { item, score } = data;
return {
doc: storeDocs[item],
ref: item,
score,
};
});
},
};
};

随后,获取 fzf 的 umd 格式的源文件,将其放在assets目录下。

例如,在 https://cdn.jsdelivr.net/npm/fzf@0.5.2/dist/fzf.umd.js 即可获取所需的 JS 文件

最后,在book.toml中加入:

1
2
[output.html]
additional-js = ["assets/js/elasticlunr.js", "assets/js/fzf.umd.js"]

就成功了!

这个解决方法在国内搜索引擎上面搜不到,只有一个知乎回答提了一嘴,最后是笔者在一个日文 mdBook 存储库里找到的详细解决方案。。。

  • 标题: 在 mdBook 中启用中文搜索
  • 作者: 方琉璃
  • 创建于 : 2026-10-04 00:00:00
  • 更新于 : 2026-10-04 19:28:15
  • 链接: https://fanglimao.github.io/2026/10/03/chinese-search-mdbook/
  • 版权声明: 本文章采用 CC BY-SA 4.0 进行许可。
评论
目录
在 mdBook 中启用中文搜索