オープンソースのナレッジベースシステム(KBPublisher)を導入した際に検索のヒット率が悪かったり、文字化けおこしたりしてたのでそれを解決するためにMySQLのiniファイルで設定を色々と変更しました。
変更した設定項目と設定値について覚書きしておきます。
MySQLのiniファイルで変更した設定項目と設定値
以下にMySQLのiniファイルで変更した設定項目と設定値について記載します。
フルテキストインデックス検索項目の変更
MATCHで検索をかける仕組みになっていたため、フルテキストインデックスの設定を行いました。
インデックスを作成するワードの最小長の設定を"1"に変更しました。
[sqld]セクションに記述します。
ft_min_word_len=1
文字化け回避の設定
ブラウザから日本語のデータをMySQL(5.1.26)に登録した際にブラウザ側では正しく日本語で表示されるものの、MySQL側では、文字が化けていたため、それを回避する設定を行いました。
クライアント側が接続した際に、デフォルトキャラクタセットをutf8にする設定です。
[sqld]セクションの記述を以下のように変更しました。
default-character-set = utf8
skip-character-set-client-handshake
character-set-server = utf8
collation-server = utf8_general_ci
init-connect = SET NAMES utf8
[sqldump]セクションの記述を以下のように変更しました。
default-character-set = utf8
[mysql]セクションの記述を以下のように変更しました。
default-character-set = utf8
[client]の記述を以下のように変更しました。
default-character-set = utf8
フルテキストインデックス再構築
フルテキストインデックスの設定値を変更したのでフルテキストインデックスの再構築が必要となります。
以下のSQLを実行することによりフルテキストインデックスの再構築が行えます。
REPAIR TABLE テーブル名 QUICK;
設定変更とフルテキストインデックスの再構築を行った結果、文字化け及びヒット率の向上が確認できました。
MySQLの文字コード確認方法
KBPublisherのデータベースをMySQLに作成した後にデータベースの文字コードが"utf8"になっていることを必ず確認してください。
"utf8"になっていないと、KBPublisher側で文字表示が問題なくても、データベースに保存されている内容が文字化けしてしまいます。
データベースの文字コードを確認したいときは、以下のSQLを実行すればよいです。
show create database データベース名;
実行結果の例
CREATE DATABASE `kb` /*!40100 DEFAULT CHARACTER SET utf8 */
コメント