2013-04-15 24 views
9

を確認するために避ける必要がある文字PSQLException:エラー:tsqueryの構文エラーは発生しませんか? ドキュメントは、検索文字列をエスケープする方法については何も言っていない:あなたの用語の周りhttp://www.postgresql.org/docs/8.3/static/datatype-textsearch.htmlPSQLException:エラー:tsqueryの構文エラー

+0

だから、どこが疑問でしょうか? –

+0

多くのクエリがあります。実際には彼らは秘密で、私は質問に答えてくれるだけで、クエリ文字列を正しくエスケープする方法はありません。 – ideaboxer

答えて

18

引用符を使用しますが、そのままフレーズ/としてそれらをしたいか、彼らは構文で使用される文字が含まれている場合:

select to_tsquery('"hello there" | hi'); 

ベアあなたは本当にあなたの言葉に狂気の文字を持ってはいけないと思っています。なぜなら、それらはtsvectorの中の何ものともマッチしないからです。

のtsqueryパーサによって認識される(非トークン)文字は、次のとおり\0(NULL)、()(空白)、|&:*!。しかし、クエリをどのようにトークン化するかは、辞書の設定方法に基づいて行う必要があります。他にもたくさんの文字がありますが、それらは構文エラーを引き起こすのではなく、クエリを正しくトークン化していないことを意味するためではありません。

単純なANDクエリの場合はplainto_tsqueryバージョンを使用し、手動でクエリを作成する必要はありません。

+0

"クレイジーキャラクター"を定義してください、私の質問に答えます:-) – ideaboxer

+0

(私の主な目的は、誰かがクレイジーキャラクターを入力したためPSQLExceptionが発生しないようにすることです) – ideaboxer

+1

あなたの辞書には表示されません。英語の辞書については、私は言うだろう: '[^ A-Za-z0-9] ==クレイジー'。 –