hexo-next-algolia-search全文搜索
注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用
在 hexo 中通过 algolia 实现全文搜索
问题
The latest version of the Hexo-Algolia plugin removes the content indexing feature, given Algolia’s free account limitation.
通过主题官方的文档我们发现,全文索引的功能已经被移除了,原因是因为会出现Record Too Big
的报错,查阅 algolia 的文档我们可以发现免费账号,单条索引的上限为10kB
, 商业版用户的索引上限为20KB
解决
请先按照上文提到的主题配置说明配置之后进行如下操作
替换插件
在
package.json
中替换下面这一行1
"hexo-algolia": "https://github.com/mohuishou/hexo-algolia"
修改主题文件
themes\next\source\js\algolia-search.js
将
instantsearch.widgets.hits
方法中, item 对应的返回值替换为以下内容1
2
3
4
5
6
7
8
9
10
11
12return (
'<a href="' +
link +
'" class="algolia-hit-item-link">' +
'<div class="algolia-hit-item-title">' +
data._highlightResult.title.value +
"</div>" +
'<div class="algolia-hit-item-content">' +
data._snippetResult.raw.value +
"</div>" +
"</a>"
);这两步做完其实就已经完成的了全文索引,但是搜索结果会把所有内容返回,我们其实只需要匹配关键词附近的结果
开启 Attributes to snippet 特性
如下图所示点击索引->配置, 然后再到左侧列表中选中
Snippeting
然后如图所示添加字段
raw
, 右侧为显示的字符数,可以根据需求修改到这里就大功告成了,但是关键词还不够突出,可以再做一些美化
美化搜索结果
在
source/_data
中新增styles.styl
文件1
2
3
4
5
6
7
8
9
10
11
12
13em {
color: red;
font-style: normal;
}
.algolia-hit-item-title {
font-weight: bold;
}
.algolia-hit-item-content {
font-size: 0.8em;
color: #555;
}修改
_config.yml
1
2
3theme_config:
custom_file_path:
styles: source/_data/styles.stylok! 大功告成
效果
优化前:
随意找了一个博客的截图,显示只有标题,没有的高亮以及详情
优化后:
原理
原理其实很简单,获取文章原始markdown
内容,判断大小如果超过指定大小(默认 8K)就进行截断
1 |
|
详情可以查看 PR: Feature/add raw max len
关注我获取更新
猜你喜欢
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议,转载请注明出处,禁止全文转载