Posted at

Mattermostの日本語メッセージ全文検索対応まとめ(MySQL編)

More than 3 years have passed since last update.

Mattermostの日本語フォーラムを作ってもらったりしたので、簡単にまとめてみました。

確認環境は以下になります。


  • Mattermost 2.1.0

  • CentOS 7.2


    • MySQL 5.6.29


      • Mroonga 6.01



    • MySQL 5.7.11




MySQL 5.5 以前を利用している場合

Mattermostは非対応です。

参考: Software & Hardware Requirements — Mattermost 2.0 documentation


MySQL 5.6 ~ 5.7.5 を利用している場合

Mroonga ストレージエンジン を利用します。


Mroongaのインストール


1. インストール

$ sudo yum install -y http://packages.groonga.org/centos/groonga-release-1.1.0-1.noarch.rpm

$ sudo yum makecache
$ sudo yum install -y mysql-community-mroonga
$ sudo systemctl restart mysqld


2. ストレージエンジンを変更

$  mysql mattermost -u mmuser -pmmuser_password

# Mroongaストレージエンジンが有効になっていることを確認
mysql> SHOW ENGINES;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
...
| Mroonga | YES | CJK-ready fulltext search, column store | NO | NO | NO |
...
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+

# PostsテーブルのストレージエンジンをMroongaに変更
mysql> ALTER TABLE `Posts` ENGINE = Mroonga;


ngram

ストレージエンジンをMroongaに変更するだけで有効になります。デフォルトでは「バイグラム(2-gram)」となっています。


形態素解析(MeCab)

ストレージエンジンをMroongaに変更した上で、以下の作業を行います。


1. MeCabトークナイザーのインストール

$ sudo yum install -y groonga-tokenizer-mecab


2. FULLTEXT INDEXの再構築

$  mysql mattermost -u mmuser -pmmuser_password

mysql> ALTER TABLE `Posts` DROP INDEX idx_posts_message_txt;
Query OK, 0 rows affected (0.01 sec)

mysql> ALTER TABLE `Posts` ADD FULLTEXT INDEX idx_posts_message_txt (`Message`) COMMENT 'parser "TokenMecab"';
Query OK, 0 rows affected (0.02 sec)


その他の全文検索パーサ

Mroongaが対応しているトークナイザー(ユニグラム、トリグラム、etc)を利用することができます。

参考: 4.3. ストレージモード — Mroonga v6.01 documentation


MySQL 5.7.6以降を利用している場合

標準で同梱されているngram Full-Text Parser Pluginもしくは MeCab Full-Text Parser Plugin を利用します。


ngram


形態素解析(MeCab)


1. MeCab, Mecab IPA-dictionaryのインストール

$ sudo rpm -ivh http://packages.groonga.org/centos/groonga-release-1.1.0-1.noarch.rpm

$ sudo yum -y install mecab mecab-ipadic


2. my.cnfに設定を追加


my.cnf

[mysqld]

# MeCab Full-Text Parser Plugin Settings
loose-mecab-rc-file=/etc/mecabrc
innodb_ft_min_token_size=1

mysqldの再起動を忘れずに。

$ sudo systemctl restart mysqld


3. MeCab Full-Text Parser Pluginのインストール

$ mysql -u root -p

mysql> INSTALL PLUGIN mecab SONAME 'libpluginmecab.so';
Query OK, 0 rows affected (0.04 sec)

# 確認
mysql> SHOW PLUGINS;
+----------------------------+----------+--------------------+----------------------+---------+
| Name | Status | Type | Library | License |
+----------------------------+----------+--------------------+----------------------+---------+
...
| mecab | ACTIVE | FTPARSER | libpluginmecab.so | GPL |
+----------------------------+----------+--------------------+----------------------+---------+


4. FULLTEXT INDEXの再構築

$  mysql mattermost -u mmuser -pmmuser_password

mysql> ALTER TABLE `Posts` DROP INDEX idx_posts_message_txt;
Query OK, 0 rows affected (0.01 sec)

mysql> ALTER TABLE Posts ADD FULLTEXT INDEX idx_posts_message_txt (`Message`) WITH PARSER mecab;
Query OK, 0 rows affected (0.02 sec)


参考: N-gramと形態素解析の比較

以下のサイトがわかりやすいです。

以上、ご参考になれば幸いです。