Help us understand the problem. What is going on with this article?

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

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

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

terukizm
仕事でJavaやPHP、趣味でPythonやってたりやってなかったりする、フリーランスのプログラマっぽいいきものです。
http://acez.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした