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

Back to archive index

Kouhei Sutou kou****@clear*****
2013年 7月 19日 (金) 22:30:50 JST


須藤です。

In <68746****@web10*****>
  "[groonga-dev,01537] Re: 特殊記号混じりの前方一致検索について" on Thu, 18 Jul 2013 07:19:28 +0900 (JST),
  <mail_babir****@yahoo*****> wrote:

>> 「\」の次の文字は特殊な文字かどうかに関わらずそのものとして
>> 解釈するようにしました。
>> 
>>   \\ -> \
>>   \A -> A
>>   \( -> (
>>   ...
>> 
>> これで、期待した動作になっていますか?
> 
> 期待した動作になっていると思います。

よかったです!

>> ただ、SQLで書くときは
>> 
>>   AGAINST("\\\\")
>> 
>> となることに注意してください。
>> 
>> これは、
>> 
>>   "\\\\"
>> 
>> を文字列リテラルと解釈するときに*MySQLが*「\\」を「\」に変換
>> するためです。
>> 
>>   "\\\\"
>>   ↓ MySQLが文字列リテラルとして解釈
>>   \\ (groongaのクエリーパーサーに渡る文字列)
>>   ↓ groongaがクエリーとして解釈(今回の変更)
>>   \
> 
> この点が気になります。
> 
> Mysqlの場合、バックスラッシュ単体は無視される(\xはただのxとなる)ようなので、今回のエスケープ処理を実際にSQLで書く場合は
> \\\\ -> \
> \\A -> A
> \\( -> (
> となるということでしょうか?

はい、そうです。
微妙ですかねぇ。。。

> この実装になっているとすると、実質二重エスケープのような記述になってしまうので、見た目にわかりにくいのではないかと思うのです。

そうですね、理解できます。

> 問題点としてはMysqlと同じエスケープ文字をgroongaでのエスケープでも使用しているというところかと思います。
> Mysqlと別の文字をエスケープに使用する方向で調整することは難しいでしょうか?

なるほど。
とすると、どの文字を使うのがよいかということになりますね。エ
スケープ文字としてよく使われているやつがいいですねぇ、やっぱ
り。C言語のprintf()だと%をエスケープ文字というか特殊な文字と
してつかっていますが、SQLで%がでてくるとLIKEの%みたいで紛ら
わしいですよねぇ。。。
うーん。。。

-- 
須藤 功平 <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 メーリングリストの案内
Back to archive index