HAYASHI Kentaro
hayas****@clear*****
2013年 7月 2日 (火) 18:03:52 JST
林です。 On Mon, 1 Jul 2013 14:00:08 +0900 (JST) <mail_babir****@yahoo*****> wrote: > mroongaを利用させて頂いています。 > 田辺です。 > > 表題の件についてですが、mroongaの場合、 > http://y-ken.hatenablog.com/entry/mroonga-query-escape-string > こちらのブログで紹介されているように、半角特殊記号を用いた検索の場合、ダブルクオートでのエスケープが必要というのが現状かと思います。 > > ただ、ダブルクオートでのエスケープを行うと、前方一致演算子の「*」を使用できないようです。 > 特殊記号が含まれている場合にも前方一致を適用する方法はあるでしょうか? > おっしゃるとおり、この場合前方一致検索の「*」は使用できません。 田辺さんの「特殊記号をマルチバイト文字に変換してから検索する」というのが (utf8_unicode_ciが中で同一視するので)現実的に取れる対処方法だと思います。 > > ちなみに、myisamにて同じ検索を行ったところ、クオートせずに期待する検索結果を得ることができました。 > > また、myisamの場合はダブルクオートで囲んだ内容はフレーズ検索になる仕様ですが、mroongaの場合もそうなっているように思います。 > この場合、単にエスケープする用途であっても、連動してフレーズ検索になってしまうように思うのですが、このあたり、動作の認識は合っているでしょうか? > ダブルクォートで囲んだ場合はフレーズ検索になる仕様については田辺さんの認識で合っています。 > 現状では特殊記号をマルチバイト文字に変換してから検索することで、エラーが出ない状態となるため、その方法で調整しています。 > 先に述べたように、これがうまいやり方だと思います。 > > また、myisamではエラーとなっていなかった検索クエリが、mroongaを使うことでエラーとなるため、mroonga専用のエスケープ処理をアプリケーションに盛り込まなければならないこととなり、多少手間を感じております。 > > mroongaが構文エラーと見なした段階で、mroonga側でエスケープ処理をして再度クエリを実行するといったオプション等があると便利なのですが。 > > 可能でしたらご検討頂けますと幸いです。 > このあたりのエスケープ処理については田辺さんの提案も踏まえて検討してみます! -- HAYASHI Kentaro <hayas****@clear*****>