起初本站的文章搜索功能使用是本地搜索支持,但后来发现有众多网友(包括 Hugo 官网文档搜索)都使用的是 Algolia 在线搜索引擎,便顺手也给自己的站点移植到该搜索引擎上面。既然提到搜索引擎自然是少了索引文件的维护,接下来就给大家分享下结合 Github Action
实现自动化的流程。
Algolia
采用较为松散的 JSON
数据结构支持,所以实现起来也相对比较轻松一些,也可以根据自己的需求进行个性化的设计。在此就博文查找而言,暂没有做复杂的设计,只是利列举了必要的字段信息,基于 Hugo 引擎的代码参考如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 | [ {{- range $index, $entry := where .Site.RegularPages "Kind" "page" }} {{- if $index }}, {{ end }} { "objectID": "{{ .Date.Unix }}", "permalink": "{{ .Permalink | relURL }}", "title": {{ .Title }}, "content": {{ .Plain | safeJS }}, "date": {{ .Date.Format }}, "updated": {{ .Lastmod.Format }} } {{- end }} ] |
---|
注意: 切记一定要给每个索引增加 objectID
参数,以确保索引的唯一性,而且后续的索引维护也是根据这个参数作为主键进行更新等相应的操作。
这里只是把博文显示的页面进行索引化,并没有对分类、标签、列表等做索引支持,查询的内容只针对文章页面本身就足够用啦。
Hugo
支持自定义文件的内容的输出,只需要几步简单的参数定义,比如在 config.yaml
配置文件中加入如下的设置:
1 2 3 4 5 6 7 8 9 10 11 | outputFormats: # 生成 Algolia 索引文件 AlgoliaIndexes: mediaType: application/json baseName: algolia isPlainText: true notAlternative: true # 输出 Algolia 索引文件 outputs: home: ["HTML", "AlgoliaIndexes"] |
---|
默认会在 public
目录中输出一个名称为 algolia.json
的索引文件。
接下来就是要将上面生成的索引文件上传到 Algolia
服务器,在没有实现自动化支持前,每次都要手动的进行上传很是麻烦。由于站点的代码是托管在 Github
上面,于是便想到了使用 Action
来集成。
发现 Algolia
官方也提供了个 setup-algolia-cli 项目支持,不过很遗憾在使用过程中,发现导入有问题无法解决只好放弃。
1 2 3 4 | algolia version 1.2.0 algolia objects import $ALGOLIA_INDEXNAME -F $ALGOLIA_INDEXFILE bufio.Scanner: token too long Error: Process completed with exit code 1. |
---|
然后就发现 Github
市场中提供 Algolia 上传的 Action 有不少,无奈只能挑几个试试看。经过一番亲自测试下来,觉得 algolia-uploader 和 Algolia-Upload-Records 两款比较好用一些,最终选择了后者集成到本站的 Github Action 步骤中,无他主要是觉得上传后有索引ID输出响应,体验相对会好些而已,Action 脚本代码配置参考如下:
1 2 3 4 5 6 7 | - name: Upload Algolia Indexes uses: iChochy/Algolia-Upload-Records@main env: APPLICATION_ID: ${{ secrets.ALGOLIA_APPID }} ADMIN_API_KEY: ${{ secrets.ALGOLIA_ADMINKEY }} INDEX_NAME: ${{ secrets.ALGOLIA_INDEXNAME }} FILE_PATH: "public/algolia.json" |
---|
整个过程中也可谓几番波折,原以为官方的文档和资源都是好用的,结果却是出乎意料只好改用第三方的支持。还有一个百思不得其解的问题,就是同样没有 objectID
参数的索引文件,通过官方网站手动上传不会产生重复的索引,而通过 API 形式上传到服务器会不断产生重复的索引。以及说 Github 市场中琳琅满目的第三方插件,有时也是让人难以抉择,只好一步步慢慢尝试,好在最终结果还是喜人的,问题得到了解决。
参考:
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有