[groonga-dev,00975] Re: mroongaの検索結果について

Back to archive index

中谷宗嵩 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*****




groonga-dev メーリングリストの案内
Back to archive index