给 hugo 站点添加搜索功能
给站点添加搜索功能有很多种方式,不管是哪种方式,原理都是先对内容建立索引,然后使用一个搜索引擎根据索引进行查询。本文我们就用纯前端的方式来给 hugo 静态站点添加搜索功能。前言 ¶
对于数据库驱动的网站,我们可以执行SQL查询关键字进行搜索;而对于静态站点,我们需要首先生成索引文件,然后用一个搜索引擎进行查询。
这里我们使用一个纯前端的搜索引擎 Lunr
生成文章列表数据 ¶
因为我们的网站是用 hugo 搭建的静态网站,所以我们要在 hugo 构建时生成 json 格式的文章列表。
创建json模板
创建模板文件layout/_default/search.json
,内容如下:
|
|
应用数据模板生成文章列表数据
默认情况下,我们只有数据模板是不会自动生成数据的,我们需要显式使用这个模板。
首先,创建一个 search.md 文档:
|
|
我们不需要这个文档的内容,我们只是使用它的front matter
来指定输出格式,如下所示:
|
|
我们指定了这个文档的模板采用我们之前创建的数据模板文件search
,输出格式指定为JSON
。
这样在 hugo 构建时就会输出一个search/index.json
文件,内容就是我们网站的所有文章生成的一个 json 文件。
构建索引文件 ¶
在主页使用axios
获取文章列表:
|
|
构建lunr
的索引文件:
|
|
执行搜索 ¶
这一部分就比较简单了,我们有了文章的索引直接调用search
就可以了:
|
|
关于lunr
支持的搜索语法,可以查看Lurn#Search
Comments