抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

感谢柚子童鞋在杜老师的疯狂怂恿下为 Volantis 主题整合了 MeiliSearch 搜索引擎,并花费大量心思编写了相关教程,反正杜老师照着柚子童鞋的教程没做出来,不过在柚子童鞋的耐心帮助下最后还是成功实现了,这里记录下部署过程中可能遇到的坑。

写在前面

习惯水文的杜老师花了很长时间才下决心写下此文,教程太长没耐心看,看了又不愿意自行搭建,搭建了又遇到了更多的问题……

正文开始前先卖下队友,点击 这里 访问柚子童鞋写的教程。

历史背景

杜老师的博客再水,也将近 300 万字,检索文件 content.json 大小 1.42MB「还是调整后的,原有的超过 4M」

当有小伙伴使用搜索功能时,需完整加载 content.json 文件才可显示搜索结果,不仅影响体验还会产生较大流量。

之后换成了 Algolia 服务,但其最近节点位于香港,大陆访问速度较慢,且有 API 调用数限制。

在百度上疯狂谷歌之后,发现一款可自建的开源搜索引擎,就是 MeiliSearch 了。

杜老师第一时间推给了柚子童鞋,对方回复能搞!

再次感谢柚子童鞋,很快写好了教程并推送调用代码至 Volantis 主题库中。

服务搭建

杜老师是忠实的容器党,能用 Docker 的绝不考虑其它部署方法,以下是官方的部署命令,其中 MASTER_KEY 自定义,版本号 v0.28 可换成 latest

docker run -it --rm \
    -p 7700:7700 \
    -e MEILI_MASTER_KEY='MASTER_KEY'\
    -v $(pwd)/meili_data:/meili_data \
    getmeili/meilisearch:v0.28 \
    meilisearch --env="development"

如果想用某塔 Docker 管理器部署,配置如图。但墙裂建议使用命令行部署,杜老师尝试用 Docker 管理器部署几次失败,最后定位问题属于玄学:

获取密钥

部署完成后通过 IP:7700,如能看到下图页面说明部署成功:

这页面好看吧,然而没啥卵用!官方建议使用 Postman 调试 MeiliSearch,并提供了调试文件,点击 这里 跳转至 Postman 页面,点击 这里 下载官方调试文件,解压后导入 Postman:

将上文的 MASTER_KEY 填入 Token 框中:

切换至 Variables,将 url 处替换为 MeiliSearch 的域名,indexUID 建议使用 hexo,记得点击右上方 Save:

展开 MeiliSearch 进入 Key Management-Get keys,点击右侧 Send 即可获取 searchKey:

如若长期使用,建议使用生产模式部署,停用上面的实例后,使用下面命令重新部署:

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 插件,进入到博客目录后使用如下命令按照:

npm install hexo-uuid

安装完后,需要 blog/_config.yml 配置文件为如下内容:

jsonContent: 
  meta: false 
  pages: false 
  posts: 
    title: true 
    path: true 
    text: true 
    uuid: true

使用如下命令完成检索文件推送:

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'

参考下面代码修改主题配置文件即可:

search:
  enable: true
  service: meilisearch  # hexo, algolia, meilisearch
  meilisearch:
    placeholder: 'Search...'
    searchKey: 'searchKey'
    indexName: 'hexo'
    hostUrl: 'https://m.dusays.com'

注意事项

杜老师在推送检索文件时遇到了全量推送问题,表现为搜索时出现大量重复结果,杜老师选择了最简单粗暴的解决方法,上传前调用删除接口清空数据库:

curl -X DELETE 'https://m.dusays.com/indexes/hexo' -H "Authorization: Bearer MASTER_KEY"

最后分享下杜老师的 GitHub Actions 配置文件:

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

评论