hexo+github建站之站内搜索
随着站内文章数量增加,即使是作者本人查询也是比较困难。而“站内搜索”功能提供了一条便捷之路。
hexo建站支持多种站内搜索方式,现对几种常用的方式进行简要介绍。
Local Search
添加百度/谷歌/本地 自定义站点内容搜索。
此方式比较简单,本站即用此方式。
安装 search插件,在站点的更目录下,执行
1
2npm install hexo-generator-search --save
npm install hexo-generator-searchdb --save编辑 站点配置文件,新增以下内容到任意位置:
1
2
3
4
5search:
path: search.xml
field: post
format: html
limit: 10000编辑 主题配置文件,启用本地搜索功能:
1
2
3# Local search
local_search:
enable: true
Swiftype
Algolia
此特性在theme-next版本 5.1.0 中引入,要使用此功能请确保所使用的 NexT 版本在此之后。
先不要按照步骤一块配置,先明确以下两点:
- 如果仅仅支持标题搜索,可跳过
优化
一节; 优化
一节讲述如何配置多域搜索(标题、文章内容等)。
注册
官网](https://www.algolia.com/) 进行账号注册(可使用github或google账号登录)。
创建
开始创建所用API。
Search-Only API
点击
NEW INDEX
,弹出的对话框中输入自己想要的INDEX NAME
即可。API Keys,后面在文件中的配置基本都在这个页面。
更改权限。
点击ALL API KEYS 找到新建INDEX对应的key, 编辑权限,在弹出框中找到ACL选择勾选
Add records
,Delete records
,List indices
,Delete index
权限,点击update更新。
如果不想更改此API权限,也可以重新创建一个API,如下。
INDEXING API(可选)
为什么需要INDEXING API
呢?因为在Algolia平台里,除了默认的Search-Only API Key
,我们还需要创建一个APIKey,作为执行命令hexo algolia
的环境变量HEXO_ALGOLIA_INDEXING_KEY
,该APIKey需要添加删除记录,列举删除索引的权限。
进入Algolia的
API Keys
页面ALL API KEYS
选项卡。创建APIKey
- Description:HEXO_ALGOLIA_INDEXING_KEY
- Indices:**<此处选择之前创建的Index>**
- ACL:Add records,Delete records,List indices,Delete index
创建完成之后,此页面会有两个 API Key。
安装 Hexo Algolia
前往站点根目录,执行命令安装:
1 | npm install --save hexo-algolia |
更新站点配置
编辑 站点配置文件
,新增以下配置:
1 | algolia: |
更新 Index
当配置完成,在站点根目录下执行如下命令更新INDEX。
1 | export HEXO_ALGOLIA_INDEXING_KEY='Search-Only API key' or 'INDEXING API KEY' |
输出类似
集成
更改主题配置文件,找到 Algolia Search 配置部分,更改如下:
1 | # Algolia Search |
优化
按照上面的步骤配置完成之后,发现搜索仅能搜索标题而不能搜索文章内的内容,为了可以支持内容搜索,需要更换插件:将hexo-algolia
更换为hexo-algoliasearch
。
下面仅仅说一下和hexo-algolia
不一样的地方。
安装插件
1
npm install hexo-algoliasearch --save
根目录配置文件
_config.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15algolia:
applicationID: 'applicationID'
apiKey: 'Search-Only API Key(第一个创建的key)'
adminApiKey: 'Admin API Key'
indexName: 'index_name'
chunkSize: 5000
fields:
- content:strip:truncate,0,500
- excerpt:strip
- gallery
- permalink
- photos
- slug
- tags
- title重点注意:
有的教程(即使官方插件教程)会让你将
applicationID
改为appId
,此处先不更改,关于此处的两个问题:fn = function () { throw arg; };
,这种应该是找不到applicationID
或appId
,注意配置。- 页面报错
Algolia Settings are invalid
,会定位到文件source/js/src/algolia.js
中,看到变量由applicationID
、apiKey
、indexName
组成,说明配置中找不到其中的某些变量。要注意看一下目录node_modules
中插件的具体用的是applicationID
还是appId
(error happen 再看),一定要统一。
如果没有配置
fields
选项,hexo algolia
会报错TypeError: Cannot read property 'filter' of undefined
。更新Index
1
2export HEXO_ALGOLIA_INDEXING_KEY='Search-Only API key' or 'INDEXING API KEY'
hexo algolia
现在再部署页面,就会发现搜索完全可以搜索到文章内部。