Introdução à pesquisa de texto completo (tsvector, to_tsquery)
Crie índices de documentos com tsvector, execute consultas em linguagem natural com to_tsquery e classifique os resultados com ts_rank.
Introdução à pesquisa de texto completo (tsvector, to_tsquery) é uma aula grátis de SQL Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de SQL Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de SQL Academy inclui 4 aulas no total.
Por que usar pesquisa de texto completo?
LIKE/ILIKE encontra substrings. A pesquisa de texto completo (FTS) entende palavras: radicalização, palavras irrelevantes, regras de idioma e relevância ordenada. Está incorporada ao PostgreSQL — nenhuma extensão é necessária.
Dois tipos fundamentais
FTS se apoia em dois tipos:
tsvector— um documento analisado: lexemas + posiçõestsquery— uma consulta analisada: lexemas + operadores booleanos
Você os compara com o operador @@.
Analisando um documento
Transforme texto bruto em um tsvector:
SELECT to_tsvector('english', 'The quick brown foxes jump over the lazy dogs');
-- 'brown':3 'dog':9 'fox':4 'jump':5 'lazi':8 'quick':2
-- Stop words ('the', 'over') dropped; words stemmed (foxes → fox)Analisando uma consulta
E a entrada da pesquisa:
SELECT to_tsquery('english', 'foxes & dogs');
-- 'fox' & 'dog'Comparação
Use @@ para testar:
SELECT to_tsvector('english', 'The lazy fox')
@@ to_tsquery('english', 'fox'); -- TRUEIndexando uma tabela de documentos
Adicione uma coluna tsvector e um índice GIN para consultas rápidas:
CREATE TABLE articles (
id BIGSERIAL PRIMARY KEY,
title TEXT NOT NULL,
body TEXT NOT NULL
);
-- Either keep a generated tsvector column:
ALTER TABLE articles
ADD COLUMN search_doc tsvector
GENERATED ALWAYS AS (
to_tsvector('english',
coalesce(title,'') || ' ' || coalesce(body,'')
)
) STORED;
CREATE INDEX articles_search_idx ON articles USING GIN (search_doc);Pesquisando
Com o índice, as consultas são rápidas:
SELECT id, title
FROM articles
WHERE search_doc @@ to_tsquery('english', 'postgres & json')
ORDER BY id DESC;Operadores booleanos em consultas
tsquery oferece suporte a & (AND), | (OR), ! (NOT) e agrupamento:
to_tsquery('english', '(cat | dog) & !rabbit');Pesquisa por frase
Use <-> para palavras adjacentes:
to_tsquery('english', 'postgres <-> performance');
-- finds 'postgres performance', not 'postgres is great for performance'Consultas web amigáveis: websearch_to_tsquery
Aceite consultas no estilo do Google:
SELECT websearch_to_tsquery('english', 'postgres "json indexing" -mongo');Classificando resultados
Classifique com ts_rank ou ts_rank_cd:
SELECT id, title,
ts_rank(search_doc, query) AS rank
FROM articles, to_tsquery('english', 'postgres & json') AS query
WHERE search_doc @@ query
ORDER BY rank DESC
LIMIT 20;Realçando resultados
Mostre trechos correspondentes:
SELECT ts_headline('english', body,
to_tsquery('english', 'postgres & json'),
'StartSel=<mark>,StopSel=</mark>')
FROM articles
WHERE search_doc @@ to_tsquery('english', 'postgres & json');Revisão
FTS está incorporada ao PostgreSQL.
tsvector+tsquery+@@- Índice GIN para obter velocidade
- websearch_to_tsquery para entrada humana
- ts_rank para ordenar por relevância
Verificação rápida
Qual operador compara um tsvector com uma tsquery?
Perguntas Frequentes
A aula “Introdução à pesquisa de texto completo (tsvector, to_tsquery)” é grátis?
Sim — o texto completo de “Introdução à pesquisa de texto completo (tsvector, to_tsquery)” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de SQL Academy, atualize para CoddyKit PRO. O curso de SQL Academy inclui 4 aulas no total.
O que vou aprender em “Introdução à pesquisa de texto completo (tsvector, to_tsquery)”?
Crie índices de documentos com tsvector, execute consultas em linguagem natural com to_tsquery e classifique os resultados com ts_rank. Você pratica SQL Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar SQL Academy?
Nenhuma experiência prévia é necessária. SQL Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.
Quanto tempo leva a aula “Introdução à pesquisa de texto completo (tsvector, to_tsquery)”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de SQL Academy?
Sim. Cada aula de SQL Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Concatenação: || e CONCAT
- UPPER, LOWER, SUBSTRING, REPLACE
- TRIM, LPAD, RPAD
- Introdução à pesquisa de texto completo (tsvector, to_tsquery)