Tasuku SUENAGA
a****@razil*****
2007年 9月 26日 (水) 17:10:52 JST
末永です。 実装の方向で検討しますね。 おそらくバックスラッシュでのエスケープになると思います… Yamada Takuji さんは書きました: > 山田です。 > > ぜひエスケープする方法を実装して頂けますと嬉しいです。 > > #SQL標準でシングルクォートをエスケープする時のように、 > ダブルクォートを二重化するとエスケープされる、 > みたいなのがいいのでは・・と思ったりします。 > > Tasuku SUENAGA wrote: >> 現在はダブルクオート自体を検索する方法がありません。 >> エスケープの文法を考えないといけないですね… >> >> Yamada Takuji さんは書きました: >> >>> はじめまして、山田と申します。 >>> >>> sennaで、複数の単語と半角スペースから成る「センテンスとしてのデータ」を検索したいと考えています。 >>> 例えば、 >>> >>> this is a music >>> is this a music ? >>> a music is this >>> >>> という3つのデータがあった場合、「this is a music」だけを検索したいとします。 >>> その場合、センテンスの前後にダブルクォートを付けて、 >>> >>> select * from table where keyword @@ '"this is a music"'; >>> >>> というクエリーを実行すれば、このセンテンスに完全に一致するデータだけが検索できます。 >>> ここで疑問なのですが、もし検索したいデータにダブルクォートが付いていて、 >>> >>> this is a "music" >>> >>> というデータを検索したい場合、どうすれば良いでしょうか? >>> 単純に下記のようなクエリーを書いた場合、 >>> >>> select * from table where keyword @@ '"this is a "music""'; >>> >>> このクエリーをsennaは、「this is a 」と「music""」のOR条件としてパースしてしまうと思います。 >>> (データとしての"を、sennaの記法としての"と見なしてしまう) >>> >>> sennaのソースコードを確認したところ、センテンスの前後をダブルクォートで囲う記法での >>> 字句のパースは、senna-1.0.8/lib/query.c のget_phrase()関数で行われているようなのですが、 >>> ここでは特に「データとしてのダブルクォート」は想定されていないように見えます。 >>> >>> ダブルクォートで囲う記法で「データとしてのダブルクォート」を含むセンテンスを >>> 検索するには、どういうクエリーの書き方をすれば良いのでしょうか? >> >> --- >> Tasuku SUENAGA <a****@razil*****> --- Tasuku SUENAGA <a****@razil*****>