前言

用过 Flarum 的话应该知道,Flarum 的搜索功能是不支持中文的,想要加中文搜索就要自己弄。

最近刚把 汉化组论坛 换到新的服务器上,正好修一下论坛的搜索功能。最后找来找去,选择了用 Meilisearch 替代 Flarum 的搜索功能。

Meilisearch 部署我认为门槛不高,部署完也 挺好用 不好用,发完帖子要等好久。唯一的缺点就是性能要求要大一些,所以服务器配置不是特别好的话建议找别的引擎。

正文

安装 Meilisearch

由于我的服务器用的是 CentOS 7,运行 Meilisearch 二进制文件会报错 glibc 版本不够。CentOS 7 如果想升级到满足需求的版本需要自己下载源码并编译。我能力不够没搞成,所以选择了用 Docker 安装。

  1. 找一个自己喜欢的空文件夹,比如 /home/lighthouse/meilisearch
  2. 拉取 Meilisearch: docker pull getmeili/meilisearch:v1.2

配置 Meilisearch

  1. 生成一个长度大于 16 字节的秘钥(MASTER_KEY),记录下来。
  2. 把下面的 秘钥 换成你刚才生成的秘钥,然后运行。

    docker run -it --rm \
    -p 7700:7700 \
    -e MEILI_MASTER_KEY='秘钥'\
    -v $(pwd)/meili_data:/meili_data \
    getmeili/meilisearch:v1.2

    有的时候你的秘钥不符合要求,Meilisearch 的输出会有一个大黄框,内容大概是需要秘钥。在黄框的下面会出现一个 Meilisearch 生成的秘钥,复制下来再用这个秘钥执行一次上面的命令即可。

配置 Flarum 搜索

  1. 把下面的 秘钥 换成刚才的秘钥,然后运行。

    curl \
      -X GET 'http://localhost:7700/keys' \
      -H 'Authorization: Bearer 秘钥'
  2. 随后控制台会输出一串 json,格式化后大概是这样的:

    {
     "results": [{
         "name": "Default Search API Key",
         "description": "Use it to search from the frontend",
         "key": "86222955b115e2290e5596b6738",
         "uid": "3e0-d6f8-47-aab5-a7681f00",
         "actions": ["search"],
         "indexes": ["*"],
         "expiresAt": null,
         "createdAt": "2023-10-30T11:48:14.563019456Z",
         "updatedAt": "2023-10-30T11:48:14.563019456Z"
     }, {
         "name": "Default Admin API Key",
         "description": "Use it for anything that is not a search operation. Caution! Do not expose it on a public frontend",
         "key": "6e4b729e6ee27d124d59d0a3149ecb94c63",
         "uid": "ed7b8b-0fb-4441-b39c-c3df693749",
         "actions": ["*"],
         "indexes": ["*"],
         "expiresAt": null,
         "createdAt": "2023-10-30T11:48:14.561209938Z",
         "updatedAt": "2023-10-30T11:48:14.561209938Z"
     }],
     "offset": 0,
     "limit": 20,
     "total": 2
    }

    注意! 这里要把下面那个 key 复制下来。上面那个 key 只能用于搜索,用了上面那个就会导致 Flarum 发不了帖子。

  3. 进入Flarum所在目录。例如我这里是 /www/wwwroot/forum,则在控制台输入命令 cd /www/wwwroot/forum
  4. 安装 Meilisearch SDK: composer require meilisearch/meilisearch-php
  5. 安装 Scout Search: composer require clarkwinkelmann/flarum-ext-scout
  6. 进入 Flarum 的 后台管理 界面,找到 Scout Search 拓展并启用,进入拓展配置界面。
  7. Driver 设置为 MeilisearchMeilisearch Host 设置为 127.0.0.1:7700Meilisearch Key 设置为第二步中复制下来的 key
  8. 点击保存。
  9. 创建搜索索引:php flarum scout:import-all

完成!

补充

  1. 由于在控制台运行的程序在控制台退出后就会自动结束,所以可以在 配置 Meilisearch 第二步的命令中加入 -d 参数,让 Meilisearch 在后台运行。
  2. FriendsOfFlarum Merge Discussions 拓展不会用 Meilisearch 搜索。

标签: Flarum, Meilisearch, CentOS, Docker