MariaDB不支持NGRAM
恭喜你看完了,可以走了
NGRAM是什么?
MySQL内置的全文解析器使用空格确定单词的开始和结束。当涉及汉语,日语或韩语等表意语言语言时,这是一个限制,因为这些语言不使用分词符。比如说在英语中I am happy,像这样的句子MySQL内置的全文解析器能够处理,但中文中“我很开心”的表达,其内置的就不管用了。
为了解决这个问题,MySQL提供了ngram全文解析器。自MySQL5.7.6版起,MySQL将ngram全文解析器作为内置的服务器插件,这意味着当MySQL数据库服务器启动时,MySQL会自动加载该插件。 MySQL支持用于InnoDB和MyISAM存储引擎的ngram全文解析器。
你可以通过修改mysql的配置文件在[mysqld]下添加
ngram_token_size=2
来指定ngram的令牌大小,一般设置为2最适合。
起因
今天刚搞了一台新机子,准备装MariaDB来折腾。作为MySQL的魔改版,MariaDB的强大性能是早有耳闻。
然后再将驿站搬迁的过程中,意外发生了。导入数据库后,并不能正常打开,
而是抛出了Undefined array key "data" in xxx的错误。查看了logs后,确定是discussions表出问题了。
不出所料,discussions这张表并没有成功导入。再去phpmyadmin导入,却抛出了鲜红的错误。不错,在前阵子为了支持中文搜索,我ngram重新建立全文索引。
不过,令人震惊的是
MariaDB不支持NGRAM
这就很离谱
MariaDB那里也有人发issue希望能支持,不过状态处于STALLED
https://jira.mariadb.org/browse/MDEV-10267
还是老老实实用回MySQL吧。
附加内容
Flarum用ngram为discussions表重新建立全文索引的方法
即FLARUM支持中文搜索的简单方法。
转载自Extiverse:https://extiverse.com/extension/mkm/flarum-typesense-chinese-search
在my.cnf中设置ngram_token_size属性
例如,"Happy Birthday"是 "生日快乐"简体中国,在 "生日"是 "birthday"和 "快乐"翻译为"happy"。要搜索诸如此类的两个字符的词,请将ngram_token_size 值设置为 2 或更高。
[mysqld]
ngram_token_size=2
重建索引
1、把discussions表中的索引字段title删除,执行下列语句重新建立索引
ALTER TABLE 你的表头_discussions ADD FULLTEXT INDEX title (title) WITH PARSER ngram;
2、把posts表中的索引字段content删除,执行下列语句重新建立索引
ALTER TABLE 你的表头_posts ADD FULLTEXT INDEX content (content) WITH PARSER ngram;
参考:https://www.yiibai.com/mysql/ngram-full-text-parser.html
https://extiverse.com/extension/mkm/flarum-typesense-chinese-search