たてた Mattermost で 日本語全文検索 を可能にする
・( 前回の記事の続きになります )・
これで Mattermost が動いたのはいいものの、、
前回の記事では、インストールした Mattermost サーバーに投稿されたチャットデータ の日本語全文検索 機能がないので、一旦、後付けで対応させる。
目次
環境のおさらい
CentOS7
mattermost 4.7.3 ( 前回の記事の内容で稼働中 )
MariaDB 10.3.2
しかし、日本語全文検索が効かない。
-> そこで今回は、、
Mroonga groonga mecab の環境を準備して、対応する話、、
ストレージエンジン Mroonga の有効化
まず Mroonga が 無効状態であることを確認
# mysql mattermost -u root
MariaDB > SHOW ENGINES;+--------------------+---------+----------------------------------------------------------------------------------+--------------+------+------------+| Engine | Support | Comment | Transactions | XA | Savepoints |+--------------------+---------+----------------------------------------------------------------------------------+--------------+------+------------+| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | 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 > 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で扱う日本語の文字コード *2character-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=1024Minnodb_log_file_size=1Gserver-id=100max_connect_errors=10000max-connections=500
*2 -> default-character-set だと、古い書き方 とのことで ERROR になった。
*2 -> matterMost では、絵文字も使っているため、寿司ビール問題回避のためutf8mb4 の方がよい
設定の反映
○ クライアント ユーザー側のブラウザで開いている matterMostの画面を全て閉じる。
○ Mattermost を停止
# systemctl stop mattermost
○ mariaDB を停止
-> スタート (設定の変更が反映)
インデックスの再構築
○ ( インデックス再構築の前に必要に応じて DBのスキームのバックアップをとっておく )
○ いざ ALTER TABLE でインデックス再構築を。
# mysql mattermost -u root
o Postsテーブルのストレージエンジンを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 適応で、 日本語検索ができるようになった!
おまけ
( CentOS7 の サービスの問題解析のお供に )
mariaDB をいじる時は、 別のターミナルで、
# journalctl -f
としておいて そこに流れるログを 見ながら行う と 解析がスムーズかと思います。
- - -
参考: Mroonga プラグインの有効化
参考: goonga をインストール方法
参考: polkitd の " Unregistered Authentication Agent for unix-process " は問題ないか?