IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    使用 MeiliSearch 实现 Volantis 主题博客搜索「保姆教程」

    Teacher Du发表于 2024-11-01 03:51:26
    love 0

    感谢柚子童鞋在杜老师的疯狂怂恿下为 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 插件,进入到博客目录后使用如下命令按照:

    1
    npm install 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 # hexo, algolia, 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


沪ICP备19023445号-2号
友情链接