mail_babir****@yahoo*****
mail_babir****@yahoo*****
2013年 8月 1日 (木) 19:10:30 JST
田辺です。 > > 場合によっては複数回エスケープ関数を使うことがありそうなので、関数名はe()くらい短くできるといいですね。 > > おぉ。。。それはやり過ぎな気持ちになりました。。。 > MySQL全体でのエスケープ関数ならe()でもよさそうな気がしますが、 > mroonga固有のエスケープ関数なのでe()はやり過ぎな気がする、と > 感じました。 やりすぎと言われると、確かにそうかもしれません。 > MyISAMで「(仮)*」が正確に検索できているように > みえるのは実はそうではなく、単に「仮」で検索しているだけで、 > 「(仮)*」だと誤ヒットがありうるのではないかと考えられます。 これは検証された内容の通りみたいですね。 調査不足で恐縮です。 > InnoDBの挙動を確認したかは忘れてしまったのですが、InnoDBはロ > グにエラーを出していたのでシンタックスエラーの場合はヒットし > ないと思います。なので、ストレージエンジンによって挙動が違う > というのが現状じゃないかという気がしています。。。 ここは重要ですね。 オートインクリメントの最新値の件のときも、ここが判断基準になっていましたし。 > ただ、MyISAMで全文検索をしてきた人がどのくらいいる > のかわからないので、なんとも言えないなぁという気持ちがまだあ > ります。だれか、そのあたりの事情を教えてくれるとうれしいので > すが。。。 他に使っている人の意見があるといいのですが。 どうしても一対一になってしまうと、 「自分の好みを押し付けてしまう1ユーザ VS 需要が不明なものは実装したくない運営」の構図になってしまうと思うので。 現状だと、「不正確な検索を放置する」か「不正確な検索になる可能性があればエラーを出して処理を止める」かのどちらかという感じなわけですね。 > > 自動エスケープというよりは、特殊文字の解析方法をmyisamに合わせることができれば、より自然でいいかと思います。 > > > > myisamの実装を見て、似た実装ができそうなら引き続き検討頂けると有り難いです。 > > とすると、エラーの扱いまで含めたMyISAM完全互換のクエリー構文 > パーサーを作ることになりますねぇ。構文エラーのときにエラー扱 > いにできないと、パーサーを作るためのツールと相性が悪いので作 > りづらいんですよね。。。うーん。。。 > 他の部分との連携が難しいんですね。 下手するとバグの原因になるかもしれない、とも感じました。 > > mroonga_escape()については、あれば確実に便利な関数だと思うので、myisamの挙動の件とは別に実装して頂けると嬉しいです。 > > (ユーザに特殊文字を使わせたくない場合に、予めその関数でラッピングしておくという使い方もできるので) > > はい、ちょっと検討してみます。 ありがとうございます。 今のところ、これが一番問題が少ない気がしますね。 > > しつこく蒸し返して恐縮ですが、特殊文字の解析挙動が合えば、mroongaの導入にあたっての障壁がより低くなることは間違いないと思う(どうやってエスケープしようという点で悩まなくて済むし、後になってエスケープが必要なことを知って慌てることもない)ので、実現可能であれば、ぜひお願いしたいと思います。 > > は、はい。。。 > うーん、私は、ユーザーとしては「特殊文字が勝手に無視されてエ > ラーにならずに動いているけど期待した挙動じゃないこともある > (今のMyISAMの挙動)」よりは、「エラーになってすぐに問題がわ > かる(InnoDBのログをみる場合や今のmroongaの挙動)」というタ > イプなので、なかなか踏ん切りがつかないんですよねぇ。。。 やっぱり好みの問題に行き着いてしまいそうですね。 私の場合、動いたらそれでいい派なので、myisamの動きをみても、さほど不自然に感じないんですよね。 不自然というよりは、元々myisamを使っていたので、挙動としてはそれで当然のような認識になっていたりします。 このあたりは使い手によるところなんでしょうか。 そうなると、他の使い手にとっては正直「どっちでもいい」ような問題を議論してしまっているのかも知れないので、なおさら恐縮ですが・・・。 田辺公平