为Hexo增加algolia搜索功能

今天给博客增加了algolia站内搜索功能,中途有个地方整了半天,现在把遇到的坑填了。

功能预览:

image-20200713225007017

注册algolia

  • 官网注册:https://www.algolia.com/ ,或者直接用GitHub账号登陆,登陆地址: https://www.algolia.com/users/sign_in 我就是用GitHub账号登陆的

  • 新建一个index

    image-20200713225553512

  • 左侧侧边栏找到API Keys,进入后,点击ALL API Keys(这点比较重要,因为前面的API不可用,要自己新建一个拥有增加删除权限的api key)

    image-20200713225911444

    image-20200713230054350

点开新增api keys后,如上图所示,重要的是在ACL里面增加删除和新增Object的权限(按理说只用这两个权限就行,我加了好多,如上上图所示),然后填上indices栏目中的index name,可以选刚才你创建的那个index,其余默认就行。

这样你就有了一个api key(如红框马赛克),保存好,后面要用的。

image-20200713230345046

安装algolia搜索功能

  • 在Hexo工程根目录下执行下面的语句。

    1
    npm install hexo-algolia --save
  • 在Hexo根目录的_config.yml中加入algolia的配置,注意改成前面API Keys页面相应配置。

    这里注意apikey填写刚才你创建的那个有权限的,其余的在your api keys里面可以找到

    1
    2
    3
    4
    5
    6
    algolia:
    applicationID: 'your applicationID'
    apiKey: 'your apiKey'
    adminApiKey: 'your adminApiKey'
    indexName: 'your indexName'
    chunkSize: 5000
  • 上传数据到algolia,下面your apiKey替换为刚才自己创建拥有权限的api

    1
    2
    export HEXO_ALGOLIA_INDEXING_KEY=your apiKey
    hexo algolia

    注意这里需要先设置环境变量,否则会报

    1
    2
    ERROR [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.
  • 看到如下信息,证明成功了,可以去algolia网站上查看,索引已经上传成功了。

    1
    2
    3
    4
    5
    INFO  [Algolia] Testing HEXO_ALGOLIA_INDEXING_KEY permissions.
    INFO Start processing
    INFO [Algolia] Identified 5 pages and posts to index.
    INFO [Algolia] Indexing chunk 1 of 1 (50 items each)
    INFO [Algolia] Indexing done.

到Hexo开启algolia

我使用的Next主题,开启只需要一步,到主题目录下的_config.yml,修改为开启。

1
2
algolia_search:
enable: true

以下是我的设置:

1
2
3
4
5
6
7
8
algolia_search:
enable: true
hits:
per_page: 10
labels:
input_placeholder: Search for Posts
hits_empty: "我们没有找到任何搜索结果: ${query}"
hits_stats: "找到${hits}条结果(用时${time} ms)"

ok,hexo d -g