独自のSlack風チャット環境を構築できるMattermostはDockerを使うと簡単に始めることができますが、日本語で利用する場合に完全一致でしか検索が出来ないため、少々使いにくいという欠点があります。今回は、Dockerを使ったMattermost環境で部分一致検索を有効にする方法をについて紹介したいと思います。
対応前の状態がこちらです。「こんにちは」とメッセージを検索するには、例えば検索キーワードに「こんにち」と入力しても「こんにちは」というメッセージは検索結果に出てきません。
Mattermostの構築方法は様々ですが、今回説明する方法で部分一致検索が出来るようになる条件としましては、下記コマンドでコンテナ(mattermost-dev)を起動した場合となります。
またMattermostのバージョンはv4.8となります。
1 |
# docker run --name mattermost-dev -d --publish 80:8065 mattermost/platform |
早速説明に入ります。まずはじめにコンテナ mattermost-dev に接続します。
1 |
docker exec -it mattermost-dev /bin/bash |
次にmy.cnfに必要な設定をしていきます。Docker版はdebianベースなので、CentOSなどで利用できるviが利用できませんので手っ取り早く追記する方法で設定します。
1 2 3 4 5 6 7 8 |
echo "[mysql]" >> /etc/my.cnf echo "default-character-set = utf8mb4" >> /etc/my.cnf echo "" >> /etc/my.cnf echo "[mysqld]" >> /etc/my.cnf echo "character-set-server = utf8mb4" >> /etc/my.cnf echo "innodb_large_prefix = ON" >> /etc/my.cnf echo "innodb_file_format = Barracuda" >> /etc/my.cnf echo "innodb_file_format_max = Barracuda" >> /etc/my.cnf |
一旦、ここでMySQLを再起動し、ステータスで起動していることを確認します。
1 2 |
# service mysql restart # service mysql status |
MySQLに接続し、インデックスの再作成を行うためのコマンドを実行します。
1 2 3 4 5 6 7 8 9 10 11 12 |
# mysql mattermost_test -u mmuser -p mostest(デフォルトのパスワードです) mysql> ALTER TABLE Posts DROP INDEX idx_posts_message_txt; Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> ALTER TABLE Posts ADD FULLTEXT INDEX idx_posts_message_txt (`Message`) WITH PARSER ngram COMMENT 'ngram index sample'; Query OK, 0 rows affected (0.22 sec) Records: 0 Duplicates: 0 Warnings: 0 |
最後にもう一度、MySQLを再起動しましょう。
1 |
# service mysql restart |
対応後の状態がこちらです。「にち」というキーワードで「こんにちは」というメッセージなどが検索結果に出ていることが確認できます。
いかがでしたでしょうか?Mattermostの部分一致検索については、様々なサイトで紹介されていますが、私自身今回紹介した方法が一番楽で確実な方法だと思います。部分一致検索を諦めていた方はぜひお試しください。