Hexo NexT 魔改系列之二 ── 搜索篇

Next主题本身集成了三种搜索插件:Swiftype,Algolia和本地搜索。

Swiftype只能试用14天,Aloglia好像也开始收费了(更新:社区版免费,但有限制),能有的就只有本地搜索了。

不过好在目前博客的文章还不算多,本地搜索还是可以承受的。

1. 启用本地搜索

启用本地搜索的方法很简单,先安装hexo-generator-search

注意不是hexo-generator-searchdb,前者来自于wzpan/hexo-generator-search,而后者来自于theme-next/hexo-generator-searchdb。后者已经一年多没有更新了,而前者还在更新,并且增加了仅搜索标题的功能。

1
yarn install hexo-generator-search

然后在主题配置文件[1]里,启用本地搜索功能:

1
2
3
# Local search
local_search:
enable: true

然后重新生成页面:

1
2
hexo clean
hexo server

即可查看更改。

其实如果没有其它的需要的话,到这里就可以了,默认配置就已经足够用了。

也可以在站点配置文件[2]中添加配置:

1
2
3
4
search:
path: search.xml
field: post
content: true
  • path是生成的搜索文件的路径,默认是search.xml,也可以使用json格式,改为search.json
  • field是搜索的范围,默认是post,即只搜索发布的文章,也可以改为page(搜索页面,即 page 类型的页面,不含发布的文航)或者all(搜索全部)
  • content是指是否搜索文章的内容,默认为true,如果改为false的话则只搜索标题、说明等头部内容,不搜索文章的正文。

2. 解决能够正常搜索,但无法正常跳转的问题

这样配置完了之后,我发现搜索功能没有问题,但搜索出来的结果没有办法正确跳转。查看了一下生成的search.xml,发现生成的链接多了一个/,就像这样:

1
2
<link href="//posts/2018-10-24-prime-of-the-form-6k1/"/>
<url>//posts/2018-10-24-prime-of-the-form-6k1/</url>

不过在各个教程中都没有找到相应的解决方法,最后在翻issue的时候发现了一个方法,就是在搜索的时候直接去掉一个/就好了。
修改localsearch.swig的源代码:

1
2
// var articleUrl = decodeURIComponent(data.url);
var articleUrl = decodeURIComponent(data.url).substring(1);

真的是简单粗暴啊。。。

3. 启用Algolia搜索(待更新)

最近发现,Agolia搜索的社区版还是免费的,不过暂时本地搜索已经够用了,就不再折腾搜索功能了,留待以后有时间再折腾吧。

参见主题自带的文档:Algolia 搜索

参考:

  • 搜索服务 - NexT 使用文档

  1. 指的是主题目录下(theme/next/)的_config.yml文件 ↩︎

  2. 指的是根目录下的_config.yml文件 ↩︎