Kouhei Sutou
kou****@clear*****
2012年 6月 28日 (木) 22:23:23 JST
須藤です。 In <CAEQj****@mail*****> "[groonga-dev,00959] mroongaの検索結果について" on Thu, 28 Jun 2012 14:15:33 +0900, 中谷宗嵩 <nakatani_munet****@flyin*****> wrote: > 【現在の検索結果と問題点】 > > (1)"晴れ"で検索 > > mysql> select * from diaries WHERE match (content) against("晴れ > "in boolean mode); ... > ⇒問題:"日本晴れ"が取得出来ない。 character setを確認してもらえますか? ↓でcharcter_set_clientとかがutf8になっていないとうまく検索 できないはずです。(UTF-8で登録・検索しているつもりでも他の エンコーディングとして文字列を扱っているとうまく検索できな い。) mysql> SHOW VARIABLES LIKE 'character_set_%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec) とりあえず、以下のようにするとそれっぽくなると思います。 mysql> SET NAMES utf8; もし、character setがちゃんと設定されていなかったら↑を実行し てから「データの登録」と「検索」をやり直してもらえますか? すでに登録されているデータが期待したcharacter setで登録されて いるかどうかはmysqldumpの結果を見るとわかる気がします。UTF-8 で登録されていればmysqldumpの結果もUTF-8になっているはずです。 検索時にちゃんとしたcharacter setが使われているかどうかは mroongaのログレベルを上げれば確認できます。 ↓でログレベルを上げて、match againstしてみてください。 mysql> SET GLOBAL mroonga_log_level = "debug"; MYSQL_DATA_DIR/groonga.logに以下のようなログがでるはずです。 この「晴れ」の部分がgroongaに渡っているデータです。ここが UTF-8ならUTF-8で渡ってきているということです。 2012-06-28 09:12:58.790100|i|10683700|grn_ii_sel > (晴れ) 2012-06-28 09:12:58.790191|i|10683700|n=1 (晴れ) 2012-06-28 09:12:58.790237|i|10683700|exact: 5 2012-06-28 09:12:58.790253|i|10683700|hits=5 2012-06-28 09:12:58.790281| |10683700|0x7fa80030e130|:1340889178790280435 filter(5) > (2)"日本"で検索 こちらも同じ原因じゃないかと思います。 -- 須藤 功平 <kou****@clear*****> 株式会社クリアコード <http://www.clear-code.com/> (03-6231-7270) groongaサポート: http://groonga.org/ja/support/ プログラミングが好きなソフトウェア開発者を募集中: http://www.clear-code.com/recruitment/