Busca de texto completo com tsvector e GIN
Crie uma busca de texto completo pronta para produção com colunas tsvector, índices GIN e dicionários configuráveis de busca textual.
Busca de texto completo com tsvector e GIN é uma aula grátis de SQL Academy no CoddyKit. Esta é a aula 2 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.
Além de substrings: pesquisa orientada a palavras
A pesquisa de texto completo (FTS) entende palavras: lematização, palavras de parada e classificação. O PostgreSQL oferece esse recurso integrado por meio dos tipos tsvector e tsquery.
Criar um tsvector
Analisar um documento:
SELECT to_tsvector('english', 'The quick brown foxes jumped over');
-- 'brown':3 'fox':4 'jump':5 'quick':2Criar um tsquery
Analisar uma consulta:
SELECT to_tsquery('english', 'fox & jumping'); -- 'fox' & 'jump'
SELECT websearch_to_tsquery('english', 'fox jumping -lazy');Correspondência: @@
Testar um documento em relação a uma consulta:
SELECT 'fox jumping'::tsvector @@ 'fox & jump'::tsquery; -- tIndexação para FTS
Adicionar uma coluna tsvector e um índice GIN:
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);Consultas
Pesquisa filtrada rápida:
SELECT id, title FROM articles
WHERE search_doc @@ websearch_to_tsquery('english', 'postgres performance')
ORDER BY ts_rank(search_doc, websearch_to_tsquery('english', 'postgres performance')) DESC
LIMIT 20;Classificação com ts_rank
ts_rank atribui uma pontuação aos resultados com base na frequência e na posição das palavras. ts_rank_cd usa densidade de cobertura (considerando a posição):
SELECT id, ts_rank_cd(search_doc, q) AS rank
FROM articles, websearch_to_tsquery('english', $1) AS q
WHERE search_doc @@ q
ORDER BY rank DESC LIMIT 20;Trechos com ts_headline
Mostrar fragmentos correspondentes com as palavras encontradas destacadas:
SELECT ts_headline('english', body,
websearch_to_tsquery('english', $1),
'StartSel=<mark>, StopSel=</mark>, MaxFragments=2')
FROM articles
WHERE search_doc @@ websearch_to_tsquery('english', $1);Pesquisa por frase
Encontrar palavras adjacentes:
SELECT * FROM articles
WHERE search_doc @@ phraseto_tsquery('english', 'database performance');Pesos para vários campos
Atribuir mais peso ao título do que ao corpo usando setweight:
ALTER TABLE articles
ADD COLUMN search_doc tsvector
GENERATED ALWAYS AS (
setweight(to_tsvector('english', coalesce(title,'')), 'A') ||
setweight(to_tsvector('english', coalesce(body,'')), 'B')
) STORED;Configuração de idioma
A configuração english define palavras de parada, lematização etc. O PostgreSQL inclui muitos idiomas; alterne o idioma conforme necessário:
SELECT to_tsvector('turkish', 'Veritabanı performansı');Limitações da FTS integrada
É adequada para idiomas semelhantes ao inglês e oferece uma classificação básica. Para necessidades mais avançadas (BM25, embeddings vetoriais e pesquisa facetada), considere usar Elasticsearch ou OpenSearch junto com o Postgres.
Recapitulação
A FTS do PostgreSQL é uma opção padrão competente.
- tsvector + tsquery + correspondência com @@
- Índice GIN para obter velocidade
- websearch_to_tsquery para entrada humana
- ts_rank/ts_headline para resultados classificados e destacados
Verificação rápida
Você precisa filtrar rapidamente artigos por uma consulta de texto completo. Qual índice deve usar?
Aprenda SQL com um tutor de IA — grátis
Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.
- Cursos
- 46
- Aulas
- 183
Perguntas Frequentes
A aula “Busca de texto completo com tsvector e GIN” é grátis?
Sim — o texto completo de “Busca de texto completo com tsvector e GIN” é 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 “Busca de texto completo com tsvector e GIN”?
Crie uma busca de texto completo pronta para produção com colunas tsvector, índices GIN e dicionários configuráveis de busca textual. 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 2 de 4.
Quanto tempo leva a aula “Busca de texto completo com tsvector e GIN”?
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
- Busca por trigramas (pg_trgm) para correspondência aproximada
- Busca de texto completo com tsvector e GIN
- Indexação geoespacial com PostGIS
- Busca vetorial com pgvector