添加本地搜索

用 hexo-generator-searchdb生成索引

1
npm install hexo-generator-searchdb --save

们只需在站点配置文件 _config.yml 当中写入如下配置,即可为全站的文档生成索引文件了

1
2
3
4
5
search:
path: search.json
field: post
format: html
limit: 10000

其中说明为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
path:表示搜索后生成的文件路径,可以生成xml和json两种格式;将path设置为json推荐


field:表示搜索的范围,有post/page/all三种值
    post:所有的文章;
    page:所有顶部导航选项的页面;
    all:所有的文章和顶部导航选项的页面。

content:是否包含搜索到的文章的全部内容。如果false,生成的结果只包括标题和创建时间这些信息,没有文章主体。默认情况下是true.

format:搜索到的内容、选项的格式。
    html(默认):将html原文本缩略。
    striptags:将html原文本缩略,并删除所有标记。
    raw:记下每一篇文章或每一页的文字。

说明

这里的path最好配置为json类型的,这样就不用再安装插件,一些文章说是配置为search.xml,但这样是不好的,可能由于文章特殊字符导致的XML无法读取而报错。最好是配置为search.json,如果配置为search.xml,需要再安装一个

1
npm install hexo-generator-json-content --save

具体可以参考:

Hexo 博客无法搜索的终极解决方法 | 国光 (sqlsec.com)

Hexo本地搜索失效解决办法 · 大专栏 (dazhuanlan.com)

找到当前正在使用的主题的_config.yml文件,打开进行编辑,找到local_search,修改enable的值为true,注意是主题的_config.yml文件,不是Hexo全局的_config.yml文件,并且注意yml文件的对齐格式,如果空格对不上也是报错的

1
2
3
# 本地搜索
local_search:
enable: true

打开博客在搜索框中输入内容就可以正常使用了。

配置集成Algolia搜索插件

注册账号

Site Search & Discovery powered by AI | Algolia

也可以直接用Github授权登录。

  1. 新建一个Index,记得名称就可以,比如创建一个hexo-blog-index的Index
  2. 创建完不用再继续,Settings就在网页的左下角的有一个设置图标,来到【Settings > API Keys】,
  3. 创建一个API Key,点击【All API Keys > API Keys】,点击【New API Key】。在ACL里面增加DeleteObjectCreateObject的权限,还在Search的权限 即可,然后下拉选择填上 indices 栏目中的 index name ,选刚才你创建的那个index,其余默认就行。
  4. 此时将会进入Keys界面

安装依赖

1
npm install hexo-algolia --save

在主题配置文件_config.butterfly.yml中修改以下内容(不同的主题有不同的名称):

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)"

安装插件配置

1
npm install hexo-algoliasearch --save

修改站点配置文件_config.yml,添加如下代码

1
2
3
4
5
6
7
8
9
10
algolia:
applicationID: "your applicationID"
apiKey: "your Search-Only API Key"
adminApiKey: "your Admin API Key"
chunkSize: 5000
indexName: "your indexName"
fields:
- content:strip:truncate,0,500
- tags
- title

要注意的是

applicationID 有的博客写的是appId,是不对的,应该是applicationID

apiKey 填写API Key页面中的 Search-Only API Key

adminApiKey 填写API Key页面中的 Admin API Key

indexName 填写刚创建的Index的名称,比如hexo-blog-index

fields有挺多的选项,不过只选上面三个就够了,其它的基本用不到,浪费资源

那刚创建的hexo-blog-index的API Key有啥用呢,因为这个Key就是要动态使用的

配置环境变量

前往博客根目录,配置一个HEXO_ALGOLIA_INDEXING_KEY的环境变量

如果是Windows环境临时使用,或者是Linux或者Mac环境,则当前Hexo根目录打开Git

切记,必须是Git,如果Windows安装了Git,则会在目录中有右键->Git Bash Here的菜单,再依次执行如下命令:

1
2
3
4
5
6
7
8
# 【your apiKey】替换为刚才自己创建拥有权限的hexo-blog-index的key,在这用上了
# 如果是Linux/Mac环境可以使用export临时使用
# 如果是Windows环境,直接在我的电脑,环境变量中配置
export HEXO_ALGOLIA_INDEXING_KEY=your apiKey


# 再执行生成索引
hexo algolia

如果是Windows环境长期使用,则也配置环境变量中,在系统变量中配置HEXO_ALGOLIA_INDEXING_KEY的键值

如果是Linux环境升级使用,应该要配置vim ~/.bash_profile

可以参考Linux环境变量配置全攻略 - 悠悠i - 博客园 (cnblogs.com)

具体环境变量配置参考机器环境

如果配置正确,则在hexo algolia后,会有一个生成索引的打印

1
2
3
4
5
6
7
8
PS D:\GitHub\Hexo\blog> hexo algolia

INFO Validating config
INFO [hexo-algolia] Testing HEXO_ALGOLIA_INDEXING_KEY permissions.
INFO Start processing
INFO [hexo-algolia] 31 records to index (post, page).
INFO [hexo-algolia] Indexing chunk 1 of 1 (31 records)
INFO [hexo-algolia] Indexing done.

再本地打开,就能看到搜索了

1
2
3
4
5
6
7
8
9
10
11
# 清理
hexo cl

# 生成
hexo g

# 生成索引得在生成静态文件之后
hexo algolia

# 本地运行
hexo s

到此,搜索功能完成。

参考文章

为 Hexo 博客创建本地搜索引擎 | 始终 (liam.page)

hexo博客添加本地搜索功能_51CTO博客_hexo博客

Hexo集成Algolia搜索插件 | Why·Liam·Blog (naaln.com)

Hexo Butterfly Algolia 搜索的使用 | CC的部落格 (ccknbc.cc)