[groonga-dev,01522] Re: 特殊記号混じりの前方一致検索について

Back to archive index

mail_babir****@yahoo***** mail_babir****@yahoo*****
2013年 7月 6日 (土) 00:37:00 JST


田辺です。

> 「\」で特殊文字をエスケープできるようにしようと思います。
> 例えば、「\(仮\)*」のように書けるようにするということです。

アプリケーション側でのエスケープで対応となるのですね。

個人的には、結局のところ「(」等の特殊文字が入力されたことをアプリケーション側で逐一検知して、その先頭に「\」を付けるという動作になるため、現状のマルチバイトに変換して回避している方法と大差ないのではという印象です。


>   * エラーを握りつぶしてしまうと、どうしてヒットしないんだろ
>     う?あるいはどうしてヒットするんだろう?ということが起き
>     てしまいそう

おそらくmroongaを初めて使う場合、myisamで通っていた特殊文字付きのクエリが通らない点に対して、不都合を感じることが多いかと思います。

自動エスケープの有無というよりは、myisamで通っていたクエリは、最低限mroongaでも通るようになっていて、同一の検索結果を取得できて欲しいというところが本音です。

オプションとして実装頂ければ、使い手側で利用判断ができるため、万一希望しない動作となった場合にも以前の設定を適用できるようにすると、問題が少ないかと考えました。


 * MATCH AGAINSTにオプションを渡すにはセッション変数などで
    渡さないといけないので、使い勝手がよいのか判断がつかなかっ
    た


プラグマのような記述で指定できると良さそうですが、mroonga_match_escalation_thresholdのようなシステム変数で最初から設定できる形でも十分だと思います。


> ユーザーには特殊な構文を使わせないようにしたい場合はアプリケー
> ションがすべてエスケープするのがいいのではないかと思いました。
> ユーザーにどのくらい自由度を与えたいかはアプリケーション次第
> だと思うのが理由です。

確かにユーザに制限を加える場合は、特殊文字が含まれていれば弾くという処理をアプリケーション側で行うことになりそうなので、その際にエスケープ処理をすればいいと思います。

ただ、制限を加える場合にはそれ相応の対応が必要というのは当然なのですが、制限を加えないデフォルトの動作において、なおエスケープ処理が別途必要という状況は使い勝手に問題があるように感じてしまいます。

現状ではmyisamで動いていてmroongaで動かない部分はこのエスケープ周りが大きいと感じているので、この点の差異がなくなれば、myisamからの乗り換えに障害がなくなるのではと考えています。

技術的に難しい面があるとは思いますが、アプリケーション側での操作が極力減るような形で対応策をご検討頂けると幸いです。


田辺公平


--- On Thu, 2013/7/4, Kouhei Sutou <kou****@clear*****> wrote:

> 須藤です。
> 
> In <75248****@web10*****>
>   "[groonga-dev,01519] Re: 特殊記号混じりの前方一致検索について" on Wed, 3 Jul 2013 08:52:30 +0900 (JST),
>   <mail_babir****@yahoo*****> wrote:
> 
> >> > mroongaが構文エラーと見なした段階で、mroonga側でエスケープ処理をして再度クエリを実行するといったオプション等があると便利なのですが。
> >> > 
> >> > 可能でしたらご検討頂けますと幸いです。
> >> > 
> >> 
> >> このあたりのエスケープ処理については田辺さんの提案も踏まえて検討してみます!
> > 
> > ご検討ありがとうございます。
> > 
> > 他のストレージエンジンと比べてデメリットとなる面は極力なくなるようにできるといいですね。
> 
> 「\」で特殊文字をエスケープできるようにしようと思います。
> 例えば、「\(仮\)*」のように書けるようにするということです。
> 
> 自動でエスケープはやらないでおきます。理由は以下の通りです。
> 
>   * MATCH AGAINSTにオプションを渡すにはセッション変数などで
>     渡さないといけないので、使い勝手がよいのか判断がつかなかっ
>     た
>   * エラーを握りつぶしてしまうと、どうしてヒットしないんだろ
>     う?あるいはどうしてヒットするんだろう?ということが起き
>     てしまいそう
> 
> ユーザーには特殊な構文を使わせないようにしたい場合はアプリケー
> ションがすべてエスケープするのがいいのではないかと思いました。
> ユーザーにどのくらい自由度を与えたいかはアプリケーション次第
> だと思うのが理由です。
> 
> mroonga独自の構文になってしまうのがアレですが。。。
> 
> > あと、以前ご報告していたオートインクリメント値の重複の件、他のストレージと動作を合わせて頂いたようで、ありがとうございます。
> 
> 便利に使ってやってください!
> 
> -- 
> 須藤 功平 <kou****@clear*****>
> 株式会社クリアコード <http://www.clear-code.com/> (03-6231-7270)
> 
> groongaサポート:
>   http://groonga.org/ja/support/
> パッチ採用はじめました:
>   http://www.clear-code.com/recruitment/
> コミットへのコメントサービスはじめました:
>   http://www.clear-code.com/services/commit-comment.html
> 
> _______________________________________________
> groonga-dev mailing list
> groon****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/groonga-dev
> 




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