Yutaro Shimamura
yu****@irx*****
2011年 1月 15日 (土) 00:06:32 JST
佐藤さま しまむらです。 エスケープについてなのですが、文字列としてダブルクオートで囲うことにより利用することが可能です。 ドキュメントのチュートリアルデータを参考に、以下の挙動になります。 http://groonga.org/docs/tutorial/tutorial10.html 囲わない場合(佐藤さまの利用方法の場合)、syntax errorとなってしまいますが、 > select --table Comments --output_columns "comment,_score" --query "comment:@(" [[-63,1295017293.32507,0.000623724,"Syntax error! (comment:@()",[["yy_syntax_error","ecmascript.y",19]]],[]] このように、シングルクオート内でダブルクオートを利用して文字列をクオートすることで検索することができます。 > select --table Comments --output_columns "comment,_score" --query 'comment:@"("' [[0,1295017103.31636,0.000433497],[[[2],[["comment","ShortText"],["_score","Int32"]],["マイクロブログ作ってみました(甘栗むいちゃいました的な感じで)。",1],["@daijiro @tasukuchan ( 登録してみましたよー!",1]]]] また、クエリ文字列自体をダブルクオート内で表記して検索できます。 > select --table Comments --output_columns "comment,_score" --query 'comment:@"(甘"' [[0,1295017165.62638,0.000138811],[[[2],[["comment","ShortText"],["_score","Int32"]],["マイクロブログ作ってみました(甘栗むいちゃいました的な感じで)。",1],["@daijiro @tasukuchan ( 登録してみましたよー!",1]]]] 上記ではシングルクオート内で囲って表現していますが、 "\"(\"" このようにダブルクオートをエスケープすることでも大丈夫です。 どうぞよろしくお願いいたします。 On Fri, 14 Jan 2011 22:40:37 +0900 (JST) 佐藤 <yfa02****@nifty*****> wrote: > お世話になっております、佐藤です。 > > 表題の通り、()~:+><-*などの記号を含んだ文字を検索すると、エラーが返ってきます > 。 > 多分エスケープをしないといけないだろうと思うのですが、具体的にはどのようにエス > ケープ処理等をすればいいのでしょうか。 > > 具体的には以下のようなクエリーをgroongaコマンド経由で実行するとエラーが返って > きました。 > > select Entries --match_columns "body" --limit "10" --query "(" --offset "0" > > [[-63,1295012241.02491,0.000546,"Syntax error! (()",[["yy_syntax_error","ecmas > cript.y",19]]],[]] > > ちなみに、実際に利用する際には、rroonga経由で以下のように利用したいと考えてお > ります。 > > GroongaBase.groonga_context.select("Entries", > :match_columns => "body", > :query => query, > :limit => per_page, > :offset => per_page * (page - 1) > ) > > > よろしくお願いします。 > > _______________________________________________ > groonga-dev mailing list > groon****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/groonga-dev