在使用 Hexo 博客时,如果文章较多,就会发现分类和标签已经很难快速找到所需要的文章内容了。这时候就需要为 Hexo 博客系统添加本站的搜索功能。
# 本地搜索
# 安装插件
Hexo 的搜索功能依赖于 hexo-generator-search 插件,在博客根目录执行下面命令进行安装。
npm install hexo-generator-searchdb --save |
# 修改配置
# 修改站点配置文件
修改根目录下的 _config.yml
配置文件,添加如下内容。
# hexo-generator-searchdb | |
search: | |
path: search.xml | |
field: post | |
format: html | |
limit: 10000 | |
content: true |
参数说明:
- path —— 文件路径。默认为
search.xml
,如果将扩展名改为.json
,则输出格式为 JSON,否则使用 XML 格式。 - field —— 指定搜索范围。可选:
- post(默认):只覆盖博客中已发布的所有文章;
- page:只覆盖博客中所有页面;
- all:覆盖博客中所有页面和已发布的文章。
- content —— 是否包含每一篇文章的内容。若为
false
则只会根据文章标题和 meta 元数据进行搜索,默认为true
。 - format —— 页面内容的形式。可选:
- html(默认):原始 html 字符串被缩小。
- striptags:原始 html 字符串被缩小,并删除所有标签。
- raw:每个帖子或页面的 Markdown 文本。
# 修改主题配置文件
另外,还需要修改对应主题的 _config.yml
配置文件。
以 Next 主题为例,打开 ./themes/next/_config.yml 文件,开启 local_search
配置。
local_search: | |
enable: true |
# 问题
上传 GitHub Pages 后无法使用搜索功能?
表现:Local Search 一直在转圈圈
这种情况有可能是 XML 解析不正确,比如字符有问题。一种简单的解决方法是使用 json 替代 xml 格式。修改 _config.yaml
文件 search 部分,重新编译即可。
# hexo-generator-searchdb | |
search: | |
path: search.json | |
field: post | |
format: html | |
limit: 10000 | |
content: true |
# 基于 Algolia 搜索
# 安装插件
在 Hexo 中集成 Algolia 搜索服务很简单,首先需要安装 hexo-algolia
插件:
npm install --save hexo-algolia |
# 修改配置
然后在 _config.yml
文件中添加如下配置:
algolia: | |
applicationID: 'applicationID' | |
apiKey: 'apiKey' | |
indexName: '...' |
各配置项说明:
配置项 | 描述 |
---|---|
applicationID |
你的 Algolia Application ID |
apiKey |
你的 Search-Only API key |
indexName |
你创建的 Algolia index 索引名称 |
另外还需要设置一个 HEXO_ALGOLIA_INDEXING_KEY
环境变量,该变量的值是 Admin API Key。
export HEXO_ALGOLIA_INDEXING_KEY=… |
否则,在执行 hexo algolia
更新索引的时候会出现如下错误:
ERROR [hexo-algolia] Please set an `HEXO_ALGOLIA_INDEXING_KEY` environment variable to enable content indexing. | |
ERROR >> Read https://npmjs.com/hexo-algolia#api-key for more informations. |
如果想要长久保存配置,可以将 HEXO_ALGOLIA_INDEXING_KEY
环境变量添加到系统配置文件,例如在~/.bashrc 文件末尾添加。
# 问题
注意,早期版本的 Algolia 会把 adminApiKey
填写到 _config.yml
文件中,如下:
algolia: | |
appId: 'applicationID' | |
apiKey: 'apiKey' | |
adminApiKey: 'adminApiKey' | |
indexName: 'indexName' | |
chunkSize: 5000 | |
fields: | |
- title | |
- path | |
- categories | |
- content:strip:truncate,0,2000 | |
- gallery | |
- photos | |
- tags |
但是这种配置存在安全问题,因此最新版本的 Algolia 取消了 adminApiKey
配置项,并且将 appId
的名字改成了 applicationID
。如果你在执行 hexo algolia
出现错误,请注意这些配置是否正确!