在使用 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 出现错误,请注意这些配置是否正确!

# 参考

更新于

请我喝[茶]~( ̄▽ ̄)~*

Rudy Lo 微信支付

微信支付

Rudy Lo 支付宝

支付宝

Rudy Lo 贝宝

贝宝