2012-12-31 27 views
11

W jaki sposób wyłuskuje się specjalne znaki w ciągu znaków przekazane do to_tsquery? Na przykład, ten rodzaj zapytania:Wywoływanie znaków specjalnych w to_tsquery

select to_tsquery('AT&T'); 

Produkuje:

NOTICE: text-search query contains only stop words or doesn't contain lexemes, ignored 

to_tsquery 
------------ 

(1 row) 

Edit: Zauważyłem również, że nie jest taki sam problem w to_tsvector.

Odpowiedz

3

Jeśli chcesz „AT & T” należy traktować jako szukanego słowa, będziesz potrzebować niestandardowych komponentów, ponieważ domyślny parser dzieli go jako dwóch słowach:

[email protected]@[local] =# select * from ts_parse('default', 'AT&T'); 
tokid | token 
-------+------- 
    1 | AT 
    12 | & 
    1 | T 
(3 rows) 
[email protected]@[local] =# select * from ts_debug('simple', 'AT&T'); 
    alias | description | token | dictionaries | dictionary | lexemes 
-----------+-----------------+-------+--------------+------------+--------- 
asciiword | Word, all ASCII | AT | {simple}  | simple  | {at} 
blank  | Space symbols | &  | {}   |   | 
asciiword | Word, all ASCII | T  | {simple}  | simple  | {t} 
(3 rows) 

jak można patrz od the documentation for CREATE TEXT PARSER nie jest to bardzo trywialne, ponieważ parser wydaje się wymagać funkcji C.

Można znaleźć to stanowisko kogoś z dostaniem „underscore_word” być uznane jako pojedynczy wyraz przydatne: http://postgresql.1045698.n5.nabble.com/Configuring-Text-Search-parser-td2846645.html

0

Prostym rozwiązaniem jest stworzenie tsquery następująco:

select $$'AT&T'$$::tsquery; 

Można zrobić bardziej złożone zapytania:

select $$'AT&T' & Phone | '|Bang!'$$::tsquery; 

Więcej informacji można znaleźć w wyszukiwarce tekstowej docs.

Powiązane problemy