Kouhei Sutou
kou****@clear*****
2015年 5月 13日 (水) 22:20:00 JST
須藤です。 In <CAGOe04KJ-G03MvH+Jo+6kudXt+HO-GEAO_qcMf-__0414r****@mail*****> "[groonga-dev,03215] 「TokenBigramIgnoreBlankSplitSymbolAlphaDigit」設定に関して" on Wed, 13 May 2015 15:09:47 +0900, 三井しょうた <01035****@gmail*****> wrote: > parserとして、表題の > 「TokenBigramIgnoreBlankSplitSymbolAlphaDigit」設定に関してですが、 > > ・空白を無視して処理する。 > ・「090 0123 4567」に「9001」でマッチする。 > > と言う例がよく紹介されています。 > > 今回データの例として、 > 「ゴルフ△青森』 ※△は全角スペース > に対して、下記何れのキーワードでも検索結果が応答されるようにしたいと考 > えています。 > 1.「ゴルフ青森」※全角スペースなし > 2.「ごるふ青森」※全角スペースなし > 3.「ゴルフ」 > 4.「ごるふ」 > > かな、カナを無視したいので、 > normalizerに、 > 「NormalizerMySQLUnicodeCIExceptKanaCIKanaWithVoicedSoundMark」 > を設定したところ、3、4ではヒットしますが、1、2ではヒットしませんで > した。 > ※空白が無視されない > > 参考までに「NormalizerAuto」を利用すると、1、3でヒットしますが、2、 > 4ではヒットしませんでした。 > ※空白は無視されるが、かな、カナは同一視できない > > どういった設定をすれば良いかわからず、設定について何とかご教授いただき > たいと > 考えております。 すみません、groonga-normalizer-mysql(NormalizerMySQLファミ リー)のバグでした。 正規化した後の文字が半角スペースかどうかをチェックするべきと ころを、正規化前の文字が半角スペースかどうかをチェックしてい ました。。。 この変更で互換性がなくなってしまうのですが、これまでの挙動が バグだったので変更することにします。 メモ:次回リリース時にはインデックスを作りなおさないといけな いことを明記すること。Mroonga側で自動検出してインデックスを 作り直せるならその仕組みを入れること。 要検討:NormalizerAutoとかは0x20以下のASCII文字(表示できな いやつら)も空白文字扱いにしているけど groonga-normalizer-mysqlもそうするべき?そうした方が便利な気 がするけどMySQLとの互換じゃなくなる(MySQLだと'\t' = ' 'じゃ ないよね?)ので微妙な気はする。 なので、回答は修正版のgroonga-normalizer-mysqlにアップグレー ドして「NormalizerMySQL...」と「TokenBigramIgnoreBlank...」 を使ってください。ただし、アップグレード後に ALTER TABLE テーブル名 DISABLE KEYS; ALTER TABLE テーブル名 ENABLE KEYS; としてインデックスを作り直す必要があります。 たぶん、次回リリースまで待てないと思うので、この問題の修正を 含んだRPMを作りました。次回リリースまではこれでしのいでくだ さい。 * 32bit版: http://packages.groonga.org/tmp/groonga-normalizer-mysql-devel-1.1.0-1.el6.i686.rpm * 64bit版: http://packages.groonga.org/tmp/groonga-normalizer-mysql-devel-1.1.0-1.el6.x86_64.rpm rpmコマンドでインストールした後にMySQLを再起動すると groonga-normalizer-mysqlのアップグレードは完了です。その後に インデックスを作りなおしてください。 -- 須藤 功平 <kou****@clear*****> 株式会社クリアコード <http://www.clear-code.com/> Groongaベースの全文検索システムを総合サポート: http://groonga.org/ja/support/ パッチ採用 - プログラミングが楽しい人向けの採用プロセス: http://www.clear-code.com/recruitment/ プログラミングが好きな学生のための勉強会: http://www.seplus.jp/sezemi/