[groonga-dev,00808] Re: 特定の文字の組み合わせでParseError

Zurück zum Archiv-Index

Kouhei Sutou kou****@clear*****
2012年 5月 2日 (水) 18:19:52 JST


須藤です。

In <20120****@gmo-m*****>
  "[groonga-dev,00804] 特定の文字の組み合わせでParseError" on Tue, 01 May 2012 18:57:20 +0900,
  河野 隆志 <takas****@gmo-m*****> wrote:

> ´と▽と`を一文字ずつ個別に検索してみるとmroonga、tritonn双方とも
> 同じ結果が返ってきますが、´▽`を並べると駄目なようです。

トークナイズのしかたが違うような気がしますが。。。

(ないとは思いますが、)念のため、mroongaのパーサーを
TokenMecabなどに変更していないか確認してもらえますか?

あと、もし可能であれば、Tritonnでヒットするがmroongaではヒッ
トしないテキスト(検索クエリ「´▽`」の方ではなく、この検索
クエリにヒットしたレコードのテキスト)をいくつか教えてもらえ
ないでしょうか?

> 問題のクエリ2
> mroongal> SELECT * FROM hogehoge WHERE MATCH (text) AGAINST ('*D+ ´ ▽ `)' IN BOOLEAN MODE) ORDER BY cdate DESC LIMIT 1;
> ERROR 1064 (42000): failed to parse fulltext search keyword: <*D+ ´ ▽ `)>: <Syntax error! (´ ▽ `))>
> 
> tritonnでは実行可能で、結果も返ってきます。

mroongaではTritonnよりもエラー処理をしっかりやるようになって
いるため、↑のような閉じカッコ「)」だけで開きカッコがない場
合などでエラーがでるようになっています。(Tritonnの場合はそ
こで解析を終了し、閉じカッコの前まで「´ ▽ `」がクエリ文字
列として扱われているようにみえる。Sennaのソースコードより。)

この場合はmroongaの場合でもTritonnの場合でも「"´ ▽ `)"」と
いうようにダブルクォートで囲むのが正しいです。で、気になるの
はダブルクォート自身を入れたいときだと思いますが、その場合は
「\"」というようにバックスラッシュでエスケープしてください。


-- 
須藤 功平 <kou****@clear*****>
株式会社クリアコード <http://www.clear-code.com/> (03-6231-7270)

groongaサポート:
  http://groonga.org/ja/support/
プログラミングが好きなソフトウェア開発者を募集中:
  http://www.clear-code.com/recruitment/




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