25
35

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

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と形態素解析の比較

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

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

25
35
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
35

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?