現れた問題点
Mattermostの日本語検索ができない
N-gram(2-gram) で検索されない
ASANA
みたいな単語は、AS-SA-AN-NA
に分割されてN-gram(bi-gram)になって、MYSQLが AS / AN
がストップワードなので、検索されなくなります。
そこで、ngramを小さくした上で、ストップワードをオフにします。 そもそも、日本語では、英単語を単なる熟語として採用しているだけであり、検索キーワードそのものです。ストップワードする意味がありません。
/etc/mysql/mysql.conf.d/mysqld.cnf
## 2022-11-14 takuya ## https://dev.mysql.com/doc/refman/5.6/ja/fulltext-fine-tuning.html [mysqld] innodb_ft_min_token_size=2 ft_min_word_len=2 innodb_ft_enable_stopword=OFF
ubuntu でのファイルの場所
ubuntu では mariadb / mysql の互換性を考えていっぱいファイルが有るのですが。mysqld.conf に設置するのが基本らしい
takuya@Gitlab:~$ sudo tree /etc/mysql /etc/mysql ├── conf.d │ ├── mysql.cnf │ └── mysqldump.cnf ├── debian-start ├── debian.cnf ├── my.cnf -> /etc/alternatives/my.cnf ├── my.cnf.fallback ├── mysql.cnf └── mysql.conf.d ├── mysql.cnf └── mysqld.cnf 2 directories, 9 files
再起動で mysqld.conf を反映
sudo systemctl restart mysql
再起動後の設定反映の確認
$ sudo mysql; mysql > SHOW VARIABLES LIKE 'innodb_ft_enable_stopword'; +---------------------------+-------+ | Variable_name | Value | +---------------------------+-------+ | innodb_ft_enable_stopword | OFF | +---------------------------+-------+ 1 row in set (0.05 sec)
設定をインデックスに反映する。
インデックスを再構築するのだが、innno_db においては、OPTIMIZE table すればいい
インデックスの再構築
$ sudo mysql; mysql > use mattermost_production_db; mysql > OPTIMIZE TABLE Posts;
インデックスの再構築は少し時間が必要なので注意。