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

Back to archive index

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*****>




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