Tasuku SUENAGA
a****@razil*****
2007年 9月 25日 (火) 13:53:05 JST
現在はダブルクオート自体を検索する方法がありません。 エスケープの文法を考えないといけないですね… 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*****>