感谢柚子童鞋在杜老师的疯狂怂恿下为 Volantis 主题整合了 MeiliSearch 搜索引擎,并花费大量心思编写了相关教程,反正杜老师照着柚子童鞋的教程没做出来,不过在柚子童鞋的耐心帮助下最后还是成功实现了,这里记录下部署过程中可能遇到的坑。
写在前面
习惯水文的杜老师花了很长时间才下决心写下此文,教程太长没耐心看,看了又不愿意自行搭建,搭建了又遇到了更多的问题……
正文开始前先卖下队友,点击 这里 访问柚子童鞋写的教程。
历史背景
杜老师的博客再水,也将近 300 万字,检索文件 content.json 大小 1.42MB「还是调整后的,原有的超过 4M」
当有小伙伴使用搜索功能时,需完整加载 content.json 文件才可显示搜索结果,不仅影响体验还会产生较大流量。
之后换成了 Algolia 服务,但其最近节点位于香港,大陆访问速度较慢,且有 API 调用数限制。
在百度上疯狂谷歌之后,发现一款可自建的开源搜索引擎,就是 MeiliSearch 了。
杜老师第一时间推给了柚子童鞋,对方回复能搞!
再次感谢柚子童鞋,很快写好了教程并推送调用代码至 Volantis 主题库中。
服务搭建
杜老师是忠实的容器党,能用 Docker 的绝不考虑其它部署方法,以下是官方的部署命令,其中 MASTER_KEY
自定义,版本号 v0.28
可换成 latest
:
1 2 3 4 5 6
| docker run -it --rm \ -p 7700:7700 \ -e MEILI_MASTER_KEY='MASTER_KEY' \ -v $(pwd)/meili_data:/meili_data \ getmeili/meilisearch \ meilisearch --env="development"
|
如果想用某塔 Docker 管理器部署,配置如图。但墙裂建议使用命令行部署,杜老师尝试用 Docker 管理器部署几次失败,最后定位问题属于玄学:
获取密钥
部署完成后通过 IP:7700
,如能看到下图页面说明部署成功:
这页面好看吧,然而没啥卵用!官方建议使用 Postman 调试 MeiliSearch,并提供了调试文件,点击 这里 跳转至 Postman 页面,复制官方调试文件链接 https://docs.meilisearch.com/postman/meilisearch-collection.json
到 Link 标签项,导入即可:
将上文的 MASTER_KEY
填入 Token 框中:
切换至 Variables,将 url 处替换为 MeiliSearch 的域名,indexUID 建议使用 hexo
,记得点击右上方 Save:
展开 MeiliSearch 进入 Key Management-Get keys,点击右侧 Send 即可获取 searchKey:
如若长期使用,建议使用生产模式部署,停用上面的实例后,使用下面命令重新部署:
1 2 3 4 5 6
| docker run -d --restart=always \ -p 7700:7700 \ -e MEILI_MASTER_KEY='MASTER_KEY' \ -v $(pwd)/meili_data:/meili_data \ getmeili/meilisearch \ meilisearch --env="production" --no-analytics
|
调试使用
为保证每篇文章拥有一个唯一值,推荐用 hexo-uuid 插件,进入到博客目录后使用如下命令按照:
安装完后,需要 blog/_config.yml 配置文件为如下内容:
1 2 3 4 5 6 7 8
| jsonContent: meta: false pages: false posts: title: true path: true text: true uuid: true
|
使用如下命令完成检索文件推送:
1 2 3 4
| curl -X POST 'https://yoursdomain.com/indexes/hexo/documents/?primaryKey=uuid' \ -H "Authorization: Bearer MASTER_KEY" \ -H "Content-Type: application/json" \ --data-binary '@public/content.json'
|
参考下面代码修改主题配置文件即可:
1 2 3 4 5 6 7 8
| search: enable: true service: meilisearch meilisearch: placeholder: 'Search...' searchKey: 'searchKey' indexName: 'hexo' hostUrl: 'https://m.dusays.com'
|
注意事项
杜老师在推送检索文件时遇到了全量推送问题,表现为搜索时出现大量重复结果,杜老师选择了最简单粗暴的解决方法,上传前调用删除接口清空数据库:
1
| curl -X DELETE 'https://m.dusays.com/indexes/hexo' -H "Authorization: Bearer MASTER_KEY"
|
最后分享下杜老师的 GitHub Actions 配置文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| name: CI on: push: branches: [ "main" ] workflow_dispatch: schedule: - cron: '30 16 * * *' jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - uses: actions/setup-node@v1 with: node-version: '16.17' - name: npm run: | npm i -g hexo-cli npm i - name: hexo run: | hexo g --silent gulp curl -X DELETE 'https://m.dusays.com/indexes/hexo' -H "Authorization: Bearer ${{secrets.MEILISEARCH_KEY}}" curl -X POST 'https://m.dusays.com/indexes/hexo/documents/?primaryKey=uuid' -H "Authorization: Bearer ${{secrets.MEILISEARCH_KEY}}" -H "Content-Type: application/json" --data-binary '@public/content.json' - name: Deploy uses: peaceiris/actions-gh-pages@v3 with: deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }} external_repository: penndu/my-website publish_branch: master publish_dir: ./public
|