惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
DataBreaches.Net
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Google DeepMind News
Google DeepMind News
博客园 - 聂微东
Microsoft Azure Blog
Microsoft Azure Blog
V
Visual Studio Blog
IT之家
IT之家
博客园 - 【当耐特】
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
B
Blog
爱范儿
爱范儿
阮一峰的网络日志
阮一峰的网络日志
云风的 BLOG
云风的 BLOG
Vercel News
Vercel News
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
H
Hackread – Cybersecurity News, Data Breaches, AI and More
H
Help Net Security
J
Java Code Geeks
aimingoo的专栏
aimingoo的专栏
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
B
Blog RSS Feed
Blog — PlanetScale
Blog — PlanetScale
S
SegmentFault 最新的问题
Apple Machine Learning Research
Apple Machine Learning Research

Mohuishou

如何实现支持多集群的 Kubernetes Operator? 第三方应用如何调用我们 kubebuilder 生成的自定义资源? Kubernetes 简明教程 k8s job 为何迟迟不能结束? Go 工程化(十一) 如何优雅的写出 repo 层代码 Go 工程化(十) 如何在整洁架构中使用事务? 给博客添加章节目录 使用 Notion Database 管理静态博客文章 一个普通 Go 开发的三年 4. localhost 就一定是 localhost 么? Go可用性(七) 总结: 一张图串联可用性知识点 Go可用性(六) 熔断 10. 总结 9. kubebuilder 进阶: 源码分析 8. kubebuilder 进阶: webhook 7. kubebuilder 进阶: 测试 6. kubebuilder 实战: status & event 5. kubebuilder 实战: CRUD 4. kustomize 简明教程 3. KubeBuilder 简明教程 2. Kind: 如何快速搭建本地 K8s 开发环境? 1. Operator概述: 如何对 Kubernetes 进行扩展 Go可用性(五) 自适应限流 Go可用性(四) 漏桶算法 Go可用性(三) 令牌桶的实现 rate/limt Go可用性(二) 令牌桶原理及使用 Go可用性(一) 隔离设计 Go并发编程(十二) Singleflight Go工程化(九) 项目重构实践 Go工程化(八) 单元测试
hexo-next-algolia-search全文搜索
Mohuishou · 2019-04-09 · via Mohuishou

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

在 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

解决

请先按照上文提到的主题配置说明配置之后进行如下操作

  1. 替换插件

    package.json中替换下面这一行

    1
    "hexo-algolia": "https://github.com/mohuishou/hexo-algolia"
  2. 修改主题文件themes\next\source\js\algolia-search.js

    instantsearch.widgets.hits方法中, item 对应的返回值替换为以下内容

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    return (
    '<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>"
    );

    这两步做完其实就已经完成的了全文索引,但是搜索结果会把所有内容返回,我们其实只需要匹配关键词附近的结果

  3. 开启 Attributes to snippet 特性

    如下图所示点击索引->配置, 然后再到左侧列表中选中Snippeting

    然后如图所示添加字段raw, 右侧为显示的字符数,可以根据需求修改

    到这里就大功告成了,但是关键词还不够突出,可以再做一些美化

  4. 美化搜索结果

    source/_data中新增styles.styl文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    em {
    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
    3
    theme_config:
    custom_file_path:
    styles: source/_data/styles.styl

    ok! 大功告成

效果

  1. 优化前:

    随意找了一个博客的截图,显示只有标题,没有的高亮以及详情

  2. 优化后:

原理

原理其实很简单,获取文章原始markdown内容,判断大小如果超过指定大小(默认 8K)就进行截断

1
2
3
4
5
6
7
8
9
10
11
// 获取原始内容
var rawBuf = new Buffer(data.raw);
// 获取大小限制
var rowSize = options.maxRawSize * 1024;
if (rawBuf.length > rowSize) {
// 超出限制,进行截断
storedPost.raw = rawBuf.toString("utf8", 0, rowSize);
// 去除最后一个字符
// 由于截断是按照字节截断的,但是一个中文字符不止一个字节,可能会导致最后一个字符乱码
storedPost.raw = storedPost.raw.substring(0, storedPost.raw.length - 1);
}

详情可以查看 PR: Feature/add raw max len

关注我获取更新

猜你喜欢