使用Meilisearch为NodeBB提供中文搜索支持
注意:生产环境和开发环境的Apikey是相互独立的,可以参考Meilisearch在生产环境中apikey无效的解决方法一文
Nodebb默认的搜索插件nodebb-plugin-dbsearch
不支持中文,中文搜索很棘手,目前主流的方法是:
- Apache Solr (需要安装java)
- ElasticSearch (据说资源开销相当大,吃内存)
今天找到了另一个很好的方案 - Meilisearch,这个名字就让人有好感,美丽
的拼音,同样也是个开源项目,截至发文日期已经有31.9K个star
Meilisearch的安装和配置
开始安装
# Update the list of available packages and their versions apt update # Install curl which is required to install Meilisearch in the next step apt install curl -y # Install Meilisearch latest version from the script curl -L https://install.meilisearch.com | sh
移动至/usr/bin
目录,让meilisearch
随处可用
# Move the Meilisearch binary to your system binaries mv ./meilisearch /usr/bin/
检测安装是否成功,运行
meilisearch
如果出现下面画面说明安装成功
888b d888 d8b 888 d8b 888 8888b d8888 Y8P 888 Y8P 888 88888b.d88888 888 888 888Y88888P888 .d88b. 888 888 888 .d8888b .d88b. 8888b. 888d888 .d8888b 88888b. 888 Y888P 888 d8P Y8b 888 888 888 88K d8P Y8b "88b 888P" d88P" 888 "88b 888 Y8P 888 88888888 888 888 888 "Y8888b. 88888888 .d888888 888 888 888 888 888 " 888 Y8b. 888 888 888 X88 Y8b. 888 888 888 Y88b. 888 888 888 888 "Y8888 888 888 888 88888P' "Y8888 "Y888888 888 "Y8888P 888 888 Database path: "./data.ms" Server listening on: "localhost:7700"
将Meilisearch设置为系统服务运行
我们的设置会在/etc/systemd/system
目录中创建meilisearch.service
服务,并在端口7700
中运行。
其中 --dev
参数可指定运行环境,--master-key
参数为Admin Api Key
,这里很重要一定要记住,后面要在nodebb的插件中使用。
为了安全考虑,apikey
我建议使用https://randomkeygen.com/工具随机生成出一组。
cat << EOF > /etc/systemd/system/meilisearch.service [Unit] Description=Meilisearch After=systemd-user-sessions.service [Service] Type=simple ExecStart=/usr/bin/meilisearch --http-addr localhost:7700 --env production --master-key Y0urVery-S3cureAp1K3y [Install] WantedBy=default.target EOF
运行后我们便成功注册了meilisearch的服务,这时候需要运行并设置自启动服务
# Set the service meilisearch systemctl enable meilisearch # Start the meilisearch service systemctl start meilisearch # Verify that the service is actually running systemctl status meilisearch
查看status会输出结果
-# --- Expected output --- ● meilisearch.service - MeiliSearch Loaded: loaded (/etc/systemd/system/meilisearch.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2020-04-10 14:27:49 UTC; 1min 8s ago Main PID: 14960 (meilisearch)
!小提示:
meilisearch的apikey可以通过
./meilisearch --master-key="MASTER_KEY"
命令单独生成。
设置Nginx反向代理(可选)
meilisearch的默认服务端口是7700
,如果要通过80端口访问,则需要用nginx做反向代理
# Delete the default configuration file for Nginx rm -f /etc/nginx/sites-enabled/default # Add your configuration file specifying the Reverse Proxy settings cat << EOF > /etc/nginx/sites-enabled/meilisearch server { listen 80 default_server; listen [::]:80 default_server; server_name _; location / { proxy_pass http://localhost:7700; } } EOF
修改对应server_name
绑定域名。
如果在Ubuntu中配置了Let's Encrypt服务这时候可以使用certbot --nginx -d yourdomain.com
命令来为域名生成证书。
为NodeBB安装meilisearch插件
在开始之前一定要停用nodebb默认搜索插件nodebb-plugin-dbsearch
,在nodebb项目目录运行
npm install nodebb-plugin-meilisearch
安装后到控制面板重启论坛,并找到插件配置Apikey
最后到前端测试