MySQL
全文検索
Mattermost

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

More than 1 year has 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と形態素解析の比較

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

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