2013-04-15 19 views
9

Quali caratteri devono essere evitati per assicurarsi che PSQLException: ERRORE: errore di sintassi in tsquery non si verificherà? La documentazione non dice nulla su come sfuggire la stringa di ricerca: http://www.postgresql.org/docs/8.3/static/datatype-textsearch.htmlPSQLException: ERRORE: errore di sintassi in tsquery

+0

quindi, dov'è il quer? –

+0

Ci sono molte domande. In realtà sono segrete e non ho bisogno di più di una risposta alla mia domanda: come sfuggire correttamente la stringa di query? – ideaboxer

risposta

18

Utilizzare le virgolette intorno i termini, se si desidera loro come frasi/testualmente o contengono caratteri utilizzati nella sintassi:

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

Bare tieni presente che non dovresti avere davvero personaggi pazzi nelle tue condizioni, dal momento che non stanno andando ad abbinare nulla nel tsvector.

I (non token) caratteri riconosciuti dal parser tsquery sono: \0 (nullo), (, ), (spazi), |, &, :, * e !. Tuttavia, il modo in cui il tokenize della query deve essere basato su come è stato impostato il dizionario. Ci sono molti altri caratteri che probabilmente non vorrai nella tua query, non perché causeranno un errore di sintassi ma perché significa che non stai sincronizzando correttamente la tua query.

Utilizzare la versione plainto_tsquery se si tratta di una semplice query AND e non si desidera gestire manualmente la query.

+0

Si prega di definire "personaggi pazzi", quindi la mia domanda è stata risolta :-) – ideaboxer

+0

(il mio obiettivo principale è evitare qualsiasi occorrenza di PSQLException solo perché qualcuno ha inserito caratteri pazzi) – ideaboxer

+1

Qualsiasi carattere che non appare nel dizionario. Per un dizionario inglese direi: '[^ A-Za-z0-9] == pazzo'. –