MattermostのMySQLで日本語の全文検索に対応する方法

Mattermostでは日本語の部分検索が対応していませんので、例えば「よろしくお願いします。」を検索するときに「よろし」ではヒットしません。これじゃ使えない。

そこで、日本語での部分検索(日本語全文検索)に対応する方法をメモ的にご紹介しておきたいと思います。

但し、MySQLは5.7を利用します。(標準機能のngramを使う為)
5.6以前も対応できますが、手順が異なるので今回は 5.7 のみ。
ちなみにOSは CentOS 7 を想定して記述しています。

character-setの変更

my.cnf を修正してキャラクタセットを変更します。

$ vim /etc/my.cnf

下記の内容を追記、もしくは置き換えます。

[mysql] default-character-set = utf8mb4

[mysqld] character-set-server = utf8mb4
innodb_large_prefix = ON
innodb_file_format = Barracuda
innodb_file_format_max = Barracuda

MySQLを再起動

$ systemctl restart mysqld
$ systemctl status mysqld

全文検索用にngramでインデックスを再作成

全文検索用にngramを指定してFULLTEXTインデックスを再作成します。

$ mysql mattermost -u mattermost -p

下記SQLを実行。

mysql> ALTER TABLE Posts DROP INDEX idx_posts_message_txt;
mysql> ALTER TABLE Posts ADD FULLTEXT INDEX idx_posts_message_txt ('Message') WITH PARSER ngram COMMENT 'ngram reindex';

これで完了です。
日本語での部分検索ができるようになっているはず。

2 COMMENTS

yi

参考まで。

dockerhubのmattermost/platform使って日本語検索に対応するだけでよければ、
mattermost起動したあとに、

root@850d5a5626d4:/# mysql $MYSQL_DATABASE -u$MYSQL_USER -p$MYSQL_PASSWORD
mysql> ALTER TABLE Posts DROP INDEX idx_posts_message_txt;
mysql> ALTER TABLE Posts ADD FULLTEXT INDEX idx_posts_message_txt (`Message`) WITH PARSER ngram COMMENT ‘ngram reindex’;
mysql> exit

とかするだけで、いけちゃってるようです。楽ですね・・・

返信する
おかしら

おぉ・・・DockerHubのを使うと楽ですね‥。
OSからわざわざ準備したくないというような状況のときには便利そう。
情報ありがとうございます!!!

返信する

コメントを残す

メールアドレスが公開されることはありません。