DBサーバーで検証するには高価すぎる理由はありますか?クライアントのts_query解析アルゴリズムを複製するのは少し過度に思えます。
妥当性検査を行うたびにクエリ全体(おそらくテーブルアクセスを含む)を実行したくないという懸念がある場合は、小さなクエリで入力を使用することができます。 )Pythonのようなビットに見えるが、それは単なる偶然だ:
is_valid_query(input):
try:
execute("SELECT ts_query($1)", input);
return True
except DatabaseError:
return False
フレージングに関しては、フレーズを持つため、これらをフィルタリングし、その後、)インデックスを使用して(最初の非言葉で表現クエリで検索する、おそらく最も簡単です。それはサーバー側またはクライアント側で行うことができます。解析される言語に応じて、繰り返し空白や他の無視できる記号を扱うフレーズの単純な正規表現を作成するのが最も簡単かもしれません。
- to_tsqueryを検索する( 'ハロー|(私は& CATSをLIKE &)')、緩く一致するドキュメントのリストを取り戻します。
- クライアントでは、正規表現 "HELLO |(I \ s + LIKE \ s + CATS)"に一致するフィルタをフィルタします。
欠点は、クエリを適切な疎なクエリに変換して正規表現に変換するための追加コードが必要なことです。
最後に、は、ts_vectorsに格納されている語彙の位置を使用して適切なフレーズ検索を行うためのPostgreSQLの手法とすることができます。私は、フレーズ検索が意図された用途の1つであると推測していますが、わかりやすい検索でその例を見つけることはできませんでした。 http://linuxgazette.net/164/sephton.htmlの底に近い部分があります。
ここに回答がありませんでしたか?奇妙な – Asaf