关于Flarum中无法使用中文搜索功能

前言

在搭建 Flarum 论坛后,发现一个很问题就是:中文搜索功能似乎不支持模糊查询
例如一篇文章的标题是:关于迷茫的一些话题
你在搜索框输入 关于迷茫一些话题 等关键词 是无法得到搜索结果的

但是你输入:关于迷茫的一些话题 他就能准确的返回结果

本次问题出现在以下环境中:

  • Flarum core: 1.8.10

  • DataBase:11.8.6-MariaDB-ubu2404

  • PHP version: 8.3.22

问题根源:Flarum 默认使用 MySQL/MariaDB 的全文索引分词器是基于空格和标点进行分词的。

MariaDB/MySQL 默认的全文索引分词器(ngramMeCab 之前)是基于空格和标点进行分词的。英文单词由空格自然分隔,但中文句子是连续的字符序列(例如:“关于迷茫的一些话题”)。

  • 数据库默认认为这是一个无空格的长单词

  • 因此,它建立的全文索引条目仅为 关于迷茫的一些话题 这个完整的字符串。

  • 数据库默认的分词器在寻找空格。因为中文句子没有空格,它无法拆分词汇,导致索引表里只存了那句完整的长难句(doge)

例如:

  • 英文视角"I love Linux" 是由空格自然切分的词组。数据库索引会记录 I, love, Linux 三个单词。

  • 中文视角关于迷茫的一些话题 在数据库眼里是一个整体。

所以你搜索 关于 迷茫一些话题 等关键词 是无法得到搜索结果的;你输入:关于迷茫的一些话题 他就能准确的返回结果

解决方案

方案一:修改数据库全文索引分词器为 Ngram

注意!此办法仅支持MySQL5.7+ 或 MySQL8+ 的版本,如果你使用了 MariaDB 作为数据库,请查看方案二 或者 自行查看发行说明,我不清楚MariaDB 是否支持Ngram!

并且此方法一定程度上会影响数据库性能!

通过修改数据库索引定义,让 MySQL 以固定长度切分汉字(例如每 2 个汉字一个词),从而支持模糊搜索。

操作步骤:

  1. 备份数据库 (涉及危险操作,可能会导致数据丢失)

  2. 配置 ngram_token_size

    ngram_token_size进行设置。打开MySQL配置文件mysql.cnf,加入如下内容

    [mysqld]
    ngram_token_size=2
  3. .重启数据库

  4. 修改表结构,重建索引:

-- 这两组代码要在 Flarum 数据库下执行 以重建全文索引。 记得改自己的表前缀

-- 1. 删除原有的全文索引 
ALTER TABLE `flarum_posts` DROP INDEX `content`;
ALTER TABLE `flarum_discussions` DROP INDEX `title`;

-- 2. 创建支持 ngram 解析器的全文索引

ALTER TABLE `flarum_posts` ADD FULLTEXT INDEX `content` (`content`) WITH PARSER ngram;
ALTER TABLE `flarum_discussions` ADD FULLTEXT INDEX `title` (`title`) WITH PARSER ngram;
  1. 清理 Flarum 缓存:

php flarum cache:clear

效果预期:重新搜索“迷茫”、“关于”、“话题”均可返回结果。实现模糊查询


方案二:使用搜索引擎 我这里以Meilisearch为例子

操作步骤:

  1. 部署Meilisearch 建议使用Doceker部署 (这里不讲解Meilisearch的部署方式 具体请见下方链接文档 )

使用 Docker 运行 Meilisearch - Meilisearch 文档 -

  1. 安装 Scout Search 扩展

composer require clarkwinkelmann/flarum-ext-scout

Scout Search - Flarum Community 他不仅支持Meilisearch ,具体请详见文档

  1. 开启扩展:在 Flarum 后台开启 Scout Search

  2. ScoutSearch 插件设置

  • 驱动: 选择 Meilisearch

Meilisearch 设置

  • Host: http://你部署Meilisearch服务器地址:端口

  • Master Key: 填入你刚才创建容器时设置的密钥。


  1. 配置好了不代表能搜到,因为 Meilisearch 里现在是空的。你需要把 MariaDB 里的用户产生的帖子灌进搜索引擎。

php flarum scout:import-all

执行完毕后没有异常你就再回去搜索试试吧!


关于Flarum中无法使用中文搜索功能
https://wlw301.top//archives/qhcqEI5q
作者
ShoKo.
发布于
2026年04月18日
更新于
2026年04月19日
许可协议