[Senna-dev 693] ダブルクォートで囲う記法で「データとしてのダブルクォート」を使用するには?

Back to archive index

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()関数で行われているようなのですが、
ここでは特に「データとしてのダブルクォート」は想定されていないように見えます。

ダブルクォートで囲う記法で「データとしてのダブルクォート」を含むセンテンスを
検索するには、どういうクエリーの書き方をすれば良いのでしょうか?




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