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

Zurück zum Archiv-Index

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




Senna-dev メーリングリストの案内
Zurück zum Archiv-Index