前言
用过Flarum的话应该知道,Flarum的搜索功能是不支持中文的,想要加中文搜索就要自己弄。
最近刚把汉化组论坛换到新的服务器上,正好修一下论坛的搜索功能。最后找来找去,选择了用Meilisearch替代Flarum的搜索功能。
Meilisearch部署我认为门槛不高,部署完也挺好用。唯一的缺点就是性能要求要大一些,所以服务器配置不是特别好的话建议找别的引擎。
正文
安装Meilisearch
由于我的服务器用的是CentOS 7,运行Meilisearch二进制文件会报错glibc版本不够。CentOS 7如果想升级到满足需求的版本需要自己下载源码并编译。我能力不够没搞成,所以选择了用Docker安装。
- 找一个自己喜欢的空文件夹,比如
/home/lighthouse/meilisearch
。 - 拉取Meilisearch:
docker pull getmeili/meilisearch:v1.2
。
配置Meilisearch
-
生成一个长度大于16字节的秘钥(MASTER_KEY),记录下来。
-
把下面的
秘钥
换成你刚才生成的秘钥,然后运行。docker run -it --rm \ -p 7700:7700 \ -e MEILI_MASTER_KEY='秘钥'\ -v $(pwd)/meili_data:/meili_data \ getmeili/meilisearch:v1.2
有的时候你的秘钥不符合要求,Meilisearch的输出会有一个大黄框,内容大概是需要秘钥。在黄框的下面会出现一个Meilisearch生成的秘钥,复制下来再用这个秘钥执行一次上面的命令即可。
配置Flarum搜索
-
把下面的
秘钥
换成刚才的秘钥,然后运行。curl \ -X GET 'http://localhost:7700/keys' \ -H 'Authorization: Bearer 秘钥'
-
随后控制台会输出一串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发不了帖子。 -
进入Flarum所在目录。例如我这里是
/www/wwwroot/forum
,则在控制台输入命令cd /www/wwwroot/forum
。 -
安装Meilisearch SDK:
composer require meilisearch/meilisearch-php
-
安装Scout Search:
composer require clarkwinkelmann/flarum-ext-scout
-
进入Flarum的后台管理界面,找到Scout Search拓展并启用,进入拓展配置界面。
-
将Driver设置为
Meilisearch
,Meilisearch Host设置为127.0.0.1:7700
,Meilisearch Key设置为第二步中复制下来的key
。 -
点击保存。
-
创建搜索索引:
php flarum scout:import-all
。
完成!
补充
-
由于在控制台运行的程序在控制台退出后就会自动结束,所以可以在配置Meilisearch第二步的命令中加入
-d
参数,让Meilisearch在后台运行。 -
FriendsOfFlarum Merge Discussions拓展不会用Meilisearch搜索。