Mattermostでは日本語の部分検索が対応していませんので、例えば「よろしくお願いします。」を検索するときに「よろし」ではヒットしません。これじゃ使えない。
そこで、日本語での部分検索(日本語全文検索)に対応する方法をメモ的にご紹介しておきたいと思います。
但し、MySQLは5.7を利用します。(標準機能のngramを使う為)
5.6以前も対応できますが、手順が異なるので今回は 5.7 のみ。
ちなみにOSは CentOS 7 を想定して記述しています。
character-setの変更
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を再起動
全文検索用にngramでインデックスを再作成
全文検索用にngramを指定してFULLTEXTインデックスを再作成します。
下記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’;
これで完了です。
日本語での部分検索ができるようになっているはず。
参考まで。
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からわざわざ準備したくないというような状況のときには便利そう。
情報ありがとうございます!!!