PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como faço uma consulta SQL para palavras com pontuação no Postgresql?

tsvetor


Use o tsvector type, que faz parte do recurso de pesquisa de texto do PostgreSQL.
postgres> select 'What are Q-type Operations?'::tsvector;
              tsvector               
-------------------------------------
 'Operations?' 'Q-type' 'What' 'are'
(1 row)

Você também pode usar operadores familiares em tsvectors:
postgres> select 'What are Q-type Operations?'::tsvector
postgres>        || 'A.B.C''s of Coding'::tsvector;
                           ?column?                           
--------------------------------------------------------------
 'A.B.C''s' 'Coding' 'Operations?' 'Q-type' 'What' 'are' 'of'

Da documentação do tsvector:

Se você também quiser fazer a normalização específica do idioma, como remover palavras comuns ('the', 'a', etc) e multiplicar, use o to_tsvector função. Também atribui pesos a diferentes palavras para pesquisa de texto:
postgres> select to_tsvector('english',
postgres> 'What are Q-type Operations? A.B.C''s of Coding');
                      to_tsvector                       
--------------------------------------------------------
 'a.b.c':7 'code':10 'oper':6 'q':4 'q-type':3 'type':5
(1 row)

Pesquisa de texto completa


Obviamente, fazer isso para cada linha em uma consulta será caro - então você deve armazenar o tsvector em uma coluna separada e usar ts_query() para procurá-lo. Isso também permite que você crie um índice GiST no tsvector.
postgres> insert into text (phrase, tsvec)
postgres>   values('What are Q-type Operations?',
postgres>   to_tsvector('english', 'What are Q-type Operations?'));
INSERT 0 1

A pesquisa é feita usando tsquery e o operador @@:
postgres> select phrase from text where tsvec @@ to_tsquery('q-type');
           phrase            
-----------------------------
 What are Q-type Operations?
(1 row)