現れた問題点
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;
インデックスの再構築は少し時間が必要なので注意。