教程 · 2023年7月31日

CentOS7 Flarum使用Meilisearch搜索

Loading

前言

用过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搜索。