中谷宗嵩
nakatani_munet****@flyin*****
2012年 7月 3日 (火) 11:43:54 JST
須藤様
株式会社フライングラインの中谷です。
ご連絡ありがとうございます。
本件、理由が特定出来ないのですが、解決致しました。
須藤様のご連絡を受けて、私の方で/etc/my.cnfをいじっていると、なぜか問題が解消されたようです。以下、私が行った作業です。
----------------------------------------------------
(1)/etc/my.cnfのcharacter-set関連の記述をコメントアウトし、mysql再起動。検索結果を確認。
※コメントアウトする箇所を変えながら、数回繰り返す。
(2)(1)で問題の箇所が特定出来なかったため、/etc/my.cnfの設定をもとに戻し、mysql再起動。
(3)確認のため、新しいテーブルdiaries2を作成し、テストデータを投入。
mysql> CREATE TABLE diaries2 (
-> id INT PRIMARY KEY AUTO_INCREMENT,
-> content VARCHAR(255),
-> FULLTEXT INDEX (content)
-> ) ENGINE = mroonga DEFAULT CHARSET utf8;
mysql> INSERT INTO diaries2 (content) VALUES ("日本晴れ");
(4)"晴れ"を検索すると、"日本晴れ"がヒット。
mysql> select * from diaries2 WHERE match(content) against("晴れ");
+----+--------------+
| id | content |
+----+--------------+
| 1 | 日本晴れ |
+----+--------------+
----------------------------------------------------
その後、以前うまく検索出来なかったdiariesテーブルにも、再度"日本晴れ"をインサートし、検索したところ、ヒットしませんでした。そこで、diariesテーブルを削除して作り直すと、意図通りの検索が出来るようになりました。
参考までに、以下、/etc/my.cnfの設定です。
-----------------------
[mysqld]
#datadir=/var/lib/mysql
datadir=/home/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
skip-character-set-client-handshake
character-set-server=utf8
collation-server = utf8_general_ci
init-connect = SET NAMES utf8
key_buffer_size = 128M
max_allowed_packet = 32M
table_open_cache = 1024
sort_buffer_size = 128M
net_buffer_length = 1M
read_buffer_size = 128M
read_rnd_buffer_size = 128M
myisam_sort_buffer_size = 128M
query_cache_size = 64M
thread_cache = 32
thread_stack = 1M
thread_concurrency = 8
join_buffer_size = 128M
#bi_gram
ft_min_word_len=1
#Inno_db
innodb_data_home_dir = /home/mysql/var/innoDB
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /home/mysql/var/innoDB
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
innodb_buffer_pool_size = 256M
innodb_additional_mem_pool_size = 20M
# Set .._log_file_size to 25 % of buffer pool size
innodb_log_file_size = 5M
innodb_log_buffer_size = 32M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50
#mroonga
#mroonga_default_parser=TokenMecab
mroonga_default_parser=TokenBigram
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
-----------------------
またもう1点、参考までの情報です。
実はdiariesテーブルを作成する前、別のテーブルでも同様の現象が発生しておりました。
そのテーブルは、InnoDBエンジンを使用していた既存のデータから、mysqldumpを使ってリストアしたものです。もしかすると、InnoDBで作られたデータを読み込ませたため、挙動がおかしくなったのでしょうか?
こちらのテーブルも、データを再投入すれば、正しく検索されるようになりました。(以前も何度かテーブルを作り直しましたが、そのときはうまくいきませんでした。)
大変長くなってしまいましたが、以上です。
また何か、追加でわかることがあれば報告させていただきます。
丁寧にご回答いただき、本当にありがとうございました。
-----------------------------------------
株式会社 フライングライン
中谷 宗嵩
東京都中央区銀座8-11-11 TK銀座8丁目ビル
URL: http://www.flyingline.co.jp/
Tel: 03-5537-0390 Fax: 03-5537-0391
Mail: nakatani_munet****@flyin*****