使用 Meilisearch 优化搜索功能

5 阅读

概览

Halo 内置了基于 Lucene 的全文搜索引擎,在轻度使用场景下可以满足需求。如果你的站点对搜索体验有较高要求,可以接入 Meilisearch,一个开源、高性能的搜索引擎,相比 Lucene 具有更快的搜索速度、更准确的结果排序以及更灵活的搜索语法,用户无需掌握复杂的搜索表达式即可获得理想的结果。

第一步:部署 Meilisearch

云服务

访问 https://www.meilisearch.com/cloud 注册账号,根据引导创建项目。创建完成后,在控制台可以获取实例地址和 Master Key。

使用云服务前请注意了解其计费方式。

自托管

独立 Docker Compose 部署

适合多个项目共享同一个 Meilisearch 实例的场景。部署完成后可配置域名和反向代理将服务暴露到公网:

services:
  meilisearch:
  image: getmeili/meilisearch:v1.15
  restart: unless-stopped
  ports:
    - "7700:7700"
  environment:
    - MEILI_ENV=production
// [!code highlight]
    - MEILI_MASTER_KEY=<your-super-secret-master-key-here>
  volumes:
    - meilisearch_data:/meili_data

volumes:
  meilisearch_data:
    driver: local

与 Halo 合并编排

将 Meilisearch 直接加入 Halo 的 docker-compose.yaml,两者运行在同一 Compose 网络中。

在 Halo 的 docker-compose.yamlservices 节点下添加以下内容:

meilisearch:
  image: getmeili/meilisearch:v1.15
  restart: on-failure:3
  networks:
    - halo_network
  volumes:
    - ./meilisearch-data:/meili_data
  environment:
    - MEILI_ENV=production
// [!code highlight]
    - 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
// [!code focus:10]
  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 服务地址 应填写 http://meilisearch:7700(同一 Compose 网络下通过服务名访问)。

更多部署方式可参考 Meilisearch 官方文档

第二步:安装插件

Halo 官方提供了 Meilisearch 插件,可通过以下方式安装:

插件的安装和更新方式可参考插件管理

安装 Meilisearch 插件后,还需要安装搜索组件,后者负责提供搜索 UI,Meilisearch 插件仅作为搜索引擎服务,不提供界面。

第三步:配置插件

  1. 进入控制台 → 插件 → Meilisearch → 设置,填写以下信息:

    • Meilisearch 服务地址:部署时使用的服务地址,例如 http://meilisearch:7700https://your-meili-domain.com

    • Master Key:部署时配置的 MEILI_MASTER_KEY

    • 索引名称:默认为 halo,如果同一个 Meilisearch 实例被多个项目使用,建议自定义以避免冲突

  2. 进入控制台 → 插件 → 扩展配置,在 搜索引擎 扩展点中选择 Meilisearch

数据概览

配置完成后,可以进入插件的数据概览页面查看索引状态,并在此执行重建索引或测试搜索功能。

在这个页面中,你还可以重建索引或测试搜索功能。

swexAtAdPGqJOCFSjwMhVVsiTYaBtyBF.png

注意事项

  • 如果配置完成后搜索无结果,可以尝试在数据概览页面手动重建一次索引;

  • 插件需要与搜索插件配合使用,缺少搜索插件时前台不会显示搜索入口。


评论