心地よいライフハック

これ便利だな〜と思ったことなど

たてた Mattermost で 日本語全文検索 を可能にする

 

・( 前回の記事の続きになります )・ 

 

asuki-yt.hatenablog.jp

 

 

これで Mattermost が動いたのはいいものの、、

前回の記事では、インストールした Mattermost サーバーに投稿されたチャットデータ の日本語全文検索 機能がないので、一旦、後付けで対応させる。
 
 
 目次

 

環境のおさらい

CentOS7
mattermost 4.7.3 ( 前回の記事の内容で稼働中 )
MariaDB   10.3.2 
しかし、日本語全文検索が効かない。
 
-> そこで今回は、、
 
Mroonga groonga mecab の環境を準備して、対応する話、、
 
にしようと思ったところ、 詳細を調べてみたら、 MariaDB 10.3.2 に Mroonga が内蔵されているので、それを有効化、テーブルに適応することで解決しました*1
 
 

ストレージエンジン Mroonga の有効化

 
まず Mroonga が 無効状態であることを確認
 
# mysql mattermost -u root
 
MariaDB > SHOW ENGINES;
+--------------------+---------+----------------------------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                                          | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------------------------+--------------+------+------------+
| CSV                | YES     | CSV storage engine                                                               | NO           | NO   | NO         |
| MRG_MyISAM         | YES     | Collection of identical MyISAM tables                                            | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables                        | NO           | NO   | NO         |
| Aria               | YES     | Crash-safe tables with MyISAM heritage                                           | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                                            | NO           | NO   | NO         |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                                               | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, foreign keys and encryption for tables | YES          | YES  | YES        |
| SEQUENCE           | YES     | Generated tables filled with sequential values                                   | YES          | NO   | YES        |
+--------------------+---------+----------------------------------------------------------------------------------+--------------+------+------------+

 

以上、Mroonga 無いやん。 

 
MariaDB 10.0.x 以降では Mroonga のプラグインがバンドルされているらしいので、
これを有効化してみる。
 
MariaDB > INSTALL PLUGIN Mroonga SONAME 'ha_mroonga.so';
MariaDB > CREATE FUNCTION last_insert_grn_id RETURNS INTEGER SONAME 'ha_mroonga.so';
MariaDB > CREATE FUNCTION mroonga_snippet RETURNS STRING SONAME 'ha_mroonga.so';
MariaDB > CREATE FUNCTION mroonga_command RETURNS STRING SONAME 'ha_mroonga.so';
MariaDB > CREATE FUNCTION mroonga_escape RETURNS STRING SONAME 'ha_mroonga.so';
 

 

○ Mroonga 有効の確認
 
MariaDB > SHOW EGINES;

 

 
・・・ ( 以下 項目があれば OK )
 
| Mroonga            | YES     | CJK-ready fulltext search, column store 
 
・・・
 
  MariaDB > QUIT
 
 

MariaDB の 設定ファイルの更新 ( my.cnf ) 

  # vi /etc/my.cnf.d/server.cnf
 
以下 cnfファイルの設定内容  
 
    [server]
 
    [mysqld]
    # matterMostで扱う日本語の文字コード *2
    character-set-server=utf8mb4
 
    # MeCab Full-Text Parser Plugin Settings
#    loose-mecab-rc-file=/etc/mecabrc  今回のやり方では不要
 
    # InnoDBでの単語最小文字数
    innodb_ft_min_token_size=1
    # MyISAMでの単語最小文字数(必要に応じて)
    ft_min_word_len=1
 
    # 以下は、システム仕様に合わせてよしなに
    innodb_buffer_pool_size=1024M
    innodb_log_file_size=1G
 
    server-id=100
 
    max_connect_errors=10000
    max-connections=500

  

    *2 -> default-character-set だと、古い書き方 とのことで ERROR になった。
    *2 -> matterMost では、絵文字も使っているため、寿司ビール問題回避のためutf8mb4 の方がよい
 
 

設定の反映

 
○ クライアント ユーザー側のブラウザで開いている matterMostの画面を全て閉じる。
 
○ Mattermost を停止 
 
# systemctl stop mattermost
 
mariaDB を停止
   -> スタート (設定の変更が反映)
# systemctl stop mariadb
# systemctl start mariadb

 

 

インデックスの再構築

 
○ (  インデックス再構築の前に必要に応じて DBのスキームのバックアップをとっておく )
 

# mysqldump mattermost -u root > ./ddl.sql

 

○ いざ ALTER TABLE でインデックス再構築を。
 
# mysql mattermost -u root
 
o PostsテーブルのストレージエンジンをMroongaに変更
 
MariaDB > ALTER TABLE `Channels` ENGINE = Mroonga;
MariaDB > ALTER TABLE `Posts` ENGINE = Mroonga;

 

これはできないx  
mysql> ALTER TABLE `Users` ENGINE = Mroonga;
 
-> ERROR 1062 (23000): Duplicate entry 'NULL' for key 'AuthData'
 
 
 ところが、 Posts と Channels の方は、テーブルの再構築ができたので、チャットやチャンネル検索の機能としては問題なさそうだ。
 
ユーザー検索で 困る程度かと考えられる。
 
( インデックスの再構築で対応せず、前回記事の CREATE TABLE の段階から、Mroonga を反映させておく方が吉。もし、そのやり方を記事にされている方がいたら、積極的に リンクをこちらに貼ります!)
 

準備完了!サービス再起動

 
○ テーブルの再構築結果を反映してDB再開
# systemctl restart mariadb
 
○ マターモスト 再開
# systemctl start mattermost
 
 
以上のDB 適応で、 日本語検索ができるようになった!
 

f:id:asuki_y:20180402225918p:plain

 

 おまけ 

( CentOS7 の サービスの問題解析のお供に )
 
mariaDB をいじる時は、 別のターミナルで、
# journalctl -f
としておいて そこに流れるログを 見ながら行う と 解析がスムーズかと思います。
 
- - - 
 
参考: Mroonga プラグインの有効化
 
参考: goonga をインストール方法
 
参考 :  InnoDBMyISAM の違い
 
参考: polkitd の " Unregistered Authentication Agent for unix-process " は問題ないか?
 

*1:ただし、解決したのは、チャンネル名の検索と、チャット投稿データの日本語全文検索においてであり、ユーザー名の検索においては解決できていないので注意