使用 Meilisearch 提升 Halo 网站的搜索体验
Halo 从 2.0 版本开始支持了全文搜索功能,自带的 Lucene 搜索引擎在轻度使用场景下可以满足需求,但在重度依赖搜索功能的场景下,可能在搜索速度和用户体验上存在不足,这时我们会更推荐使用独立的搜索引擎。
本文将介绍如何使用
搭建 Meilisearch 服务
部署 Meilisearch 服务通常有两种方式:你可以选择自行在服务器上托管,或者使用 Meilisearch 官方提供的云服务。
云服务
访问
需要特别注意 Meilisearch 云服务的计费方式。
自托管
下面介绍两种常见的部署方式:
使用 Docker Compose 独立编排部署
这种方式适合多个项目需要同时使用一个 Meilisearch 服务的场景。 部署完成后,你可以配置域名和反向代理来暴露服务到公网。
services:
meilisearch:
image: getmeili/meilisearch:v1.15
restart: unless-stopped
ports:
- "7700:7700"
environment:
- MEILI_ENV=production
- MEILI_MASTER_KEY=<your-super-secret-master-key-here>
volumes:
- meilisearch_data:/meili_data
volumes:
meilisearch_data:
driver: local
与 Halo 的 Compose 编排一起部署
结合 使用 Docker Compose 部署 Halo 的示例,将 Meilisearch 服务添加到
docker-compose.yml
文件中。
通过这种方式部署之后,插件设置中的 Meilisearch 服务地址 应该是
http://meilisearch:7700
(即服务在同一 Compose 网络下可通过服务名访问)
meilisearch:
image: getmeili/meilisearch:v1.15
restart: on-failure:3
networks:
- halo_network
volumes:
- ./meilisearch-data:/meili_data
environment:
- MEILI_ENV=production
- MEILI_MASTER_KEY=<your-super-secret-master-key-here>
完整示例:
version: "3"
services:
halo:
image: registry.fit2cloud.com/halo/halo:2.21
restart: on-failure:3
depends_on:
halodb:
condition: service_healthy
networks:
halo_network:
volumes:
- ./halo2:/root/.halo2
ports:
- "8090:8090"
healthcheck:
test:
["CMD", "curl", "-f", "http://localhost:8090/actuator/health/readiness"]
interval: 30s
timeout: 5s
retries: 5
start_period: 30s
environment:
- JVM_OPTS=-Xmx256m -Xms256m
command:
- --spring.r2dbc.url=r2dbc:pool:postgresql://halodb/halo
- --spring.r2dbc.username=halo
- --spring.r2dbc.password=openpostgresql
- --spring.sql.init.platform=postgresql
- --halo.external-url=http://localhost:8090/
halodb:
image: postgres:15.4
restart: on-failure:3
networks:
halo_network:
volumes:
- ./db:/var/lib/postgresql/data
healthcheck:
test: ["CMD", "pg_isready"]
interval: 10s
timeout: 5s
retries: 5
environment:
- POSTGRES_PASSWORD=openpostgresql
- POSTGRES_USER=halo
- POSTGRES_DB=halo
- PGUSER=halo
meilisearch:
image: getmeili/meilisearch:v1.15
restart: on-failure:3
networks:
- halo_network
volumes:
- ./meilisearch-data:/meili_data
environment:
- MEILI_ENV=production
- MEILI_MASTER_KEY=<your-super-secret-master-key-here>
networks:
halo_network:
详细的部署方式可以参考 Meilisearch 官方文档:https://www.meilisearch.com/docs/learn/self_hosted/install_meilisearch_locally
安装插件
之前 Halo 社区中已经有人开发了 Meilisearch 插件,但已经不再维护,因此这里我们选择使用 Halo 官方提供的插件。
下载插件,目前提供以下两种下载方式:
GitHub Releases:访问 Releases 下载 Assets 中的 JAR 文件。
安装插件,插件安装和更新方式可参考:https://docs.halo.run/user-guide/plugins
配置插件
进入插件设置,配置 Meilisearch 服务地址 和 Master Key。索引名称 可以选择使用默认的
halo
或者自定义(如果你的 Meilisearch 服务会被多个项目使用,建议自定义索引名称)。进入插件扩展配置,在 扩展点定义 中选择 搜索引擎,然后选择使用 Meilisearch。
数据概览
配置完插件后,我们可以进入插件的 数据概览 页面,查看 Meilisearch 的索引数据。
在这个页面中,你还可以重建索引或测试搜索功能。
对比
Lucene(默认搜索引擎)与 Meilisearch 的实际对比:
通过实际使用可以发现,Meilisearch 的搜索结果更加准确,搜索速度更快,并且支持更灵活的搜索语法,无需用户掌握复杂的搜索表达式即可获得理想的搜索结果。
注意
如果配置完 Meilisearch 插件之后无法搜索,可以尝试重建一次索引。
安装 Meilisearch 插件之后仍然需要
https://www.halo.run/store/apps/app-DlacW 插件,Meilisearch 插件仅仅是提供服务,不会提供 UI。