Todos os produtos
Search
Central de documentação

PolarDB:Busca de texto completo

Última atualização: Jun 28, 2026

Quando sua aplicação precisa pesquisar grandes volumes de texto não estruturado — como documentos, conteúdo gerado por usuários ou descrições de produtos — a correspondência simples de palavras-chave é insuficiente. O oferece recursos nativos de busca de texto completo, incluindo tokenização, indexação invertida, classificação de resultados e extensões para segmentação de texto em chinês e correspondência aproximada.

Como funciona a busca de texto completo

Diferentemente das buscas baseadas em palavras-chave, que verificam campos ou tags específicos, a busca de texto completo examina todo o conteúdo dos documentos para localizar informações relevantes. Essa abordagem é ideal para recuperar resultados em grandes coleções de texto não estruturado.

O pipeline de busca de texto completo compreende quatro etapas:

  • Pré-processamento de texto: realiza a tokenização do texto, remove stopwords e aplica stemming para aumentar a precisão da recuperação.

  • Construção de índice: crie um índice invertido sobre o texto pré-processado para rastrear a posição de cada termo nos documentos.

  • Processamento de consulta: analisa a consulta e a converte em um formato compatível com o índice.

  • Classificação de resultados: pontua e ordena os resultados por relevância, garantindo que os documentos mais pertinentes apareçam primeiro.

Casos de uso

  • Gestão documental: pesquise documentos internos, relatórios e contratos para reduzir o tempo de recuperação.

  • Busca online: exiba rapidamente resultados relevantes em grandes acervos de conteúdo da web ou intranet.

  • Pesquisa acadêmica: localize artigos e dados relevantes em bases acadêmicas e coleções bibliográficas.

  • E-commerce: permita que clientes encontrem produtos por palavra-chave, descrição ou correspondência parcial, melhorando a experiência de compra.

  • Redes sociais: busque publicações, comentários e conteúdo gerado por usuários usando palavras-chave.

  • Pesquisa jurídica: auxilie profissionais do direito a localizar rapidamente jurisprudências e legislações pertinentes.

  • Prontuários médicos: recupere informações de pacientes e históricos em relatórios clínicos.

  • Suporte ao cliente: apresente artigos de FAQ e documentos de suporte relevantes em portais de autoatendimento.

  • Gestão de conteúdo: indexe o conteúdo de sites ou blogs para que os visitantes encontrem artigos relevantes com agilidade.

  • Sistemas de biblioteca: permita que leitores pesquisem catálogos de livros e artigos por título, autor ou assunto.

Recursos

Tokenização

Antes que um documento possa ser pesquisado, o o pré-processa e armazena um índice para consultas futuras. O pré-processamento de texto envolve três etapas:

  • Analisar o documento em tokens — números, palavras, palavras compostas e endereços de e-mail — para que cada tipo de token seja processado independentemente.

  • Normalizar tokens em lexemas, convertendo-os para minúsculas e removendo sufixos como s ou es. Isso unifica variações de palavras em uma única forma, aumentando a precisão da busca.

  • Armazenar o documento pré-processado como um array ordenado de lexemas, juntamente com informações posicionais. Os dados de posição são usados na classificação por relevância: um documento em que os termos da consulta estão agrupados recebe uma pontuação maior do que aquele em que estão dispersos.

tsvector

O tipo de dado tsvector no armazena uma lista ordenada de lexemas e suas posições no documento. Para cargas de trabalho em produção, recomenda-se armazenar o texto processado em uma coluna tsvector em vez de calculá-lo durante a consulta.

Por exemplo, adicione uma coluna tsvector gerada a uma tabela e crie um índice GIN (Generalized Inverted Index) sobre ela para que o índice seja atualizado automaticamente a cada gravação:

ALTER TABLE documents
ADD COLUMN search_vector tsvector
    GENERATED ALWAYS AS (to_tsvector('english', title || ' ' || body)) STORED;

CREATE INDEX documents_search_idx ON documents USING GIN (search_vector);

pg_bigm

A extensão do habilita a busca de texto aproximada usando n-gramas (n-tuplas de caracteres). É adequada para aplicações com grande volume de dados textuais, como mecanismos de busca e sistemas de gestão de conteúdo, sendo especialmente eficaz para textos em idiomas asiáticos, nos quais as fronteiras entre palavras não são marcadas por espaços.

Nota

O pg_bigm melhora significativamente a eficiência de buscas com curingas, como %keyword%.

pg_trgm

O pg_trgm é uma extensão do que indexa texto usando trigramas — sequências contíguas de três caracteres. Oferece suporte a correspondência aproximada, busca por similaridade, autocompletar e correção ortográfica. Assim como o pg_bigm, o pg_trgm lida eficientemente com consultas usando curingas.

Nota

O pg_trgm melhora significativamente a eficiência de buscas com curingas, como %keyword%.

Segmentação de texto em chinês

A busca de texto padrão do PostgreSQL não segmenta corretamente o texto em chinês, pois esse idioma não utiliza espaços para delimitar palavras. O resolve essa limitação com duas extensões: pg_jieba e Zhparser.

pg_jieba

A extensão integra a biblioteca de segmentação de palavras Jieba ao PolarDB. O Jieba é uma biblioteca amplamente utilizada para segmentação de texto em chinês que identifica as fronteiras entre palavras em frases, viabilizando a busca de texto completo nesse idioma.

Zhparser

O Simple Chinese Word Segmentation (SCWS) é um mecanismo de código aberto para segmentação de palavras em chinês, baseado em dicionários de frequência de palavras.

O é construído sobre o SCWS e se integra à busca de texto completo do PostgreSQL. Oferece diversas opções de configuração e dicionários personalizados para ajustar a segmentação de texto em chinês.

Indexação

O disponibiliza dois tipos de índice para busca de texto completo: GIN e RUM.

Indexação GIN

O Generalized Inverted Index (GIN) é o tipo de índice nativo do PostgreSQL para busca de texto completo. Os índices GIN são otimizados para os tipos de dado tsvector e tsquery, proporcionando alta velocidade em consultas textuais complexas sobre grandes conjuntos de dados. O GIN também suporta JSONB e outros tipos de dados compostos.

Indexação RUM

A extensão do PostgreSQL fornece o tipo de índice RUM para consultas de busca de texto completo com classificação por relevância.

Assim como o GIN, o RUM é um índice invertido. Ele armazena metadados adicionais — como as posições dos termos dentro de um documento — junto às entradas do índice. Durante uma consulta, o RUM usa esses dados de posição armazenados para calcular a classificação de relevância sem acessar o documento original, tornando as consultas classificadas mais rápidas do que no GIN.

Processamento de consulta

tsquery

O tsquery é um tipo de dado usado para expressar condições de busca de texto completo no . Utilize-o em conjunto com tsvector e o operador de correspondência @@ para executar consultas de texto completo.

O banco de dados também fornece a função to_tsquery e funções relacionadas para converter texto simples em valores tsquery:

Função

Descrição

to_tsquery('term')

Analisa e normaliza termos; suporta operadores booleanos

plainto_tsquery('phrase')

Trata a entrada como uma frase; todos os termos são combinados com AND

phraseto_tsquery('phrase')

Exige que os termos apareçam na ordem especificada

websearch_to_tsquery('input')

Aceita sintaxe de busca no estilo Google

O tsquery suporta os seguintes operadores para criar condições compostas:

  • @@ — corresponde um tsvector a um tsquery

  • & — AND: ambos os termos devem corresponder

  • | — OR: pelo menos um dos termos deve corresponder

  • ! — NOT: o termo não deve corresponder

Classificação por relevância

ts_rank

A função ts_rank do PostgreSQL pontua o nível de correspondência entre um documento tsvector e um tsquery. Use essa pontuação para ordenar os resultados, colocando os documentos mais relevantes no topo:

SELECT title, ts_rank(search_vector, query) AS rank
FROM documents, to_tsquery('english', 'database & search') query
WHERE search_vector @@ query
ORDER BY rank DESC;