2013-04-15 16 views
9

Które znaki należy unikać, aby upewnić się, że: PSQLException: ERROR: błąd składniowy w tsquery nie wystąpi? Dokumentacja nie mówi nic o tym, jak uciec wyszukiwany ciąg: http://www.postgresql.org/docs/8.3/static/datatype-textsearch.htmlWyjątek PSQLException: BŁĄD: błąd składni w pukrzeniu

+0

czyli gdzie jest zapytanie? –

+0

Istnieje wiele zapytań. W rzeczywistości są one tajne i nie potrzebuję więcej niż odpowiedzi na moje pytanie: Jak poprawnie uciec ciąg kwerendy? – ideaboxer

Odpowiedz

18

Stosować cudzysłowie swoich kategoriach, jeśli chcesz je jako zwroty/verbatim lub zawierają znaki użyte w składni:

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

Bare pamiętaj, że nie powinieneś mieć szalonych postaci w swoich kategoriach, ponieważ nie będą one pasować do niczego w tsvector.

odnośnej (token) znaków rozpoznawanych przez parser tsquery są: \0 (zerowy) (, ), (spacje), |, &, :, * i !. Ale w jaki sposób tokenize twoje zapytanie powinno być oparte na tym, jak skonfigurować słownik. Istnieje wiele innych znaków, których prawdopodobnie nie chcesz w zapytaniu, nie dlatego, że powodują błąd składni, ale dlatego, że oznacza to, że nie jest tokenizacja zapytania poprawnie.

Użyj wersji plainto_tsquery, jeśli jest to prosta kwerenda AND i nie chcesz zajmować się ręcznym tworzeniem zapytania.

+0

Zdefiniuj "szalone postacie", wtedy moje pytanie brzmi :-) – ideaboxer

+0

(moim głównym celem jest uniknięcie wystąpienia PSQLException tylko dlatego, że ktoś wprowadził szalone postacie) – ideaboxer

+1

Dowolny znak, który nie pojawia się w twoim słowniku. Dla angielskiego słownika powiedziałbym: '[^ A-Za-z0-9] == crazy'. –