总字数:约3000字,阅读时间:约5分钟
在Hexo里面文章多了以后就会出现难以查找内容的问题,所以就需要一个站内搜索的功能。我大致看了一下NexT上支持的集中站内搜索引擎,Swiftype因为注册需要一个企业邮箱,而本人学生党并没有企业邮箱。微搜索好像主页崩了,一直登陆不上去。像百度,google这样的本地搜索UI设计实在是不堪入目。然后就选择了algolia。好在NexT 5.1以上的版本已经支持了algolia搜索,接入也比较的方便。
这是一个法国初创公司做的,致力于在毫秒级时间内完成内容搜索,具体的细节可以上官方网站 algolia 。搜索呈现像下面这样:
 
安装过程
- 首先,上 algolia 上注册一个账号,免费注册的账号可以试用14天,这期间所有的高级功能均可以使用。过了这个期限之后,只有部分功能可以使用,免费账户总共有10,000条记录,每个月有100,000的可操作数,对于一般用户应该是够用了。 - 注册了账户之后,页面如下图所示,点击NEW INDEX。需要输入一个index name, 注意这个名字最好只包含字母,数字和下划线(_),因为后端用js调用数据的时候需要用到这个index name,所以如果这个字符串里面出现了一些跟js语法像冲突的符号很有可能识别不了。   
- 完成之后,点击左边那个像钥匙一样的图标,查看自己的API Keys。注意Admin API Key是私密保存的,可以点击右边的小图标进行复制。   
- 进入站点配置文件_config.yml,在后面加入下面这些内容,其中将具体的值换成自己的Keys,注:不需要引号。 12345678# website search## algoliaalgolia:applicationID: 'your_Application_ID'apiKey: 'your_Search-Only_API_Key'adminApiKey: 'your_Admin_API_Key'indexName: 'your_Index_Name'chunkSize: 5000
- 进入git bash,在根目录下安装algolia。 1npm install hexo-algolia --save
- 在hexo目录下提交站点。 1hexo algolia #等价于hexo a- 产生的结果大致如下:   - 然后我们可以进入algolia的用户中心看一下是否内容已经提交上了。看一下红框中是否有内容。   - 有时候可能发现没有上传到数据,在git bash中出现下面这样的显示,这个时候只需要先清理一下缓存,执行一下hexo clean,然后再执行hexo a提交站点即可。 1INFO [Algolia] Identified 0 posts to index.- 这里要特别注意一下是否存在path字段,如果没有这个字段的话,搜索的时候会因为js无法检索到内容,而直接填入’undefine’,从而出现404异常。   - 这个时候我们要进入.\hexo\node_modules\hexo-algolia\lib\command.js文件,添加path字段进storedPost变量中, 1var storedPost = _.pick(data, ['title', 'date', 'slug', 'path', 'content', 'excerpt', 'permalink']);- 然后重新提交站点即可。 
- 最后进入主题配置文件,找到algolia_search选项,将enable字段值改为true。 123456789# Algolia Searchalgolia_search:enable: truehits:per_page: 10labels:input_placeholder: Search for Postshits_empty: "We didn't find any results for the search: ${query}"hits_stats: "${hits} results found in ${time} ms"- 最后重新生产站点,重新部署就完成了。 1hexo g -d
异常处理
页面空白
在安装的时候出现了文章内容加载不出来,但是查看源码的时候HTML是完整的,而且对应位置的链接也可以,如下图一样:
 
查看加载情况的时候发现js调用异常,发现是因为index name里面包含了引号,导致algolia后端的js出现异常,所以页面加载出现问题。这个时候只需要修改一下index name就可以了。
搜索后无法正确跳转
搜索后出现无法正确跳转的原因是algolia没有获取path字段,所以最后的跳转地址没有正确填充,有可能会出现点击没有反应,也有可能像上文中提到的出现404异常,这个时候只需要按上文所说,在.\hexo\node_modules\hexo-algolia\lib\command.js文件里,添加path字段到storedPost变量中即可。
| 
 | 
 |