Yamada Takuji
yamad****@media*****
2007年 9月 21日 (金) 16:20:59 JST
はじめまして、山田と申します。 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()関数で行われているようなのですが、 ここでは特に「データとしてのダブルクォート」は想定されていないように見えます。 ダブルクォートで囲う記法で「データとしてのダブルクォート」を含むセンテンスを 検索するには、どういうクエリーの書き方をすれば良いのでしょうか?