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

Back to archive index

mail_babir****@yahoo***** mail_babir****@yahoo*****
2013年 7月 18日 (木) 07:19:28 JST


田辺です。

ご返信遅れましてすみません。

> >>   3. エラーが起きてもクライアントに報告せず、ログを出力する
> >>      だけにするモードを用意する
> >>      (結果は0件になる。)
> >>      (変数で挙動を変えられるようにする。)

実装ありがとうございます。

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

期待した動作になっていると思います。


> ただ、SQLで書くときは
> 
>   AGAINST("\\\\")
> 
> となることに注意してください。
> 
> これは、
> 
>   "\\\\"
> 
> を文字列リテラルと解釈するときに*MySQLが*「\\」を「\」に変換
> するためです。
> 
>   "\\\\"
>   ↓ MySQLが文字列リテラルとして解釈
>   \\ (groongaのクエリーパーサーに渡る文字列)
>   ↓ groongaがクエリーとして解釈(今回の変更)
>   \

この点が気になります。

Mysqlの場合、バックスラッシュ単体は無視される(\xはただのxとなる)ようなので、今回のエスケープ処理を実際にSQLで書く場合は
\\\\ -> \
\\A -> A
\\( -> (
となるということでしょうか?

この実装になっているとすると、実質二重エスケープのような記述になってしまうので、見た目にわかりにくいのではないかと思うのです。
(これまでの""で括る方法の方がわかりやすいかもしれない)

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

実装された後で申し訳ないですが、ご検討のほどよろしくお願いします。


田辺公平




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