Resumo da pesquisa de texto completo

A pesquisa de texto completo (FTS, na sigla em inglês) no AlloyDB para PostgreSQL permite identificar documentos em linguagem natural que atendem a uma consulta. Essa abordagem é mais eficaz do que a correspondência de strings padrão, porque considera nuances linguísticas, como ignorar palavras irrelevantes comuns, como "o", e corresponder a diferentes formas de uma palavra, como "correr", "correndo" ou "correu".

Além dos índices GIN e GiST padrão do PostgreSQL, o AlloyDB oferece a extensão rum para pesquisa de texto completo de alto desempenho em todas as versões do PostgreSQL compatíveis com o AlloyDB (PostgreSQL 18 e anteriores) e a classificação de relevância Best Matching 25 (BM25) no PostgreSQL 17 e versões mais recentes.

Para implementar a pesquisa de texto completo (FTS, na sigla em inglês) de maneira eficaz, é importante entender como o PostgreSQL processa e pesquisa textos. A unidade de pesquisa, um documento, geralmente é uma coluna de texto ou uma combinação de colunas de uma linha. O processo de criação de índice analisa esse documento para associar palavras (ou lexemas, a forma básica de uma palavra) à linha.

Esse processo envolve um pipeline de pré-processamento que transforma o texto bruto em um formato pesquisável:

  • Dividir o texto em tokens.
  • Remoção de palavras irrelevantes comuns.
  • Normalização de palavras para a forma raiz. Por exemplo, "correr" é o lexema de "correr", "corre", "correndo" e "correu".

O uso da pesquisa de texto completo também exige que você aprenda sobre tipos de dados especializados, operadores e várias estratégias de indexação, incluindo índices integrados do PostgreSQL e os índices RUM de alto desempenho.

O PostgreSQL usa dois tipos de dados principais e um operador de correspondência para gerenciar a FTS:

  • tsvector: representa um documento em um formato pesquisável, como uma lista classificada de lexemas distintos.
  • tsquery: representa termos de pesquisa, incluindo operadores booleanos que permitem combinar lexemas.
  • @@: verifica se um tsvector corresponde a um tsquery, permitindo pesquisas com reconhecimento linguístico.

O AlloyDB é compatível com todos os tipos de índice para pesquisa de texto completo que o PostgreSQL integrado aceita. A escolha do índice depende do equilíbrio entre a velocidade de pesquisa, o tempo de criação do índice, a velocidade de atualização e as funcionalidades de pesquisa específicas necessárias, como pesquisa de frases ou classificação de relevância.

Para otimizar a relevância e a precisão da pesquisa, você também pode escolher entre as seguintes opções:

  • Índice RUM:melhora os índices GIN padrão armazenando informações posicionais diretamente no índice, permitindo que você realize pesquisas de frases e classificação de relevância mais rápidas sem acessar os dados da tabela. Essa extensão é compatível com todas as versões do PostgreSQL compatíveis com o AlloyDB (PostgreSQL 18 e anteriores). Para mais informações, consulte Criar e gerenciar um índice RUM.
  • Índice BM25:implementa o algoritmo probabilístico Best Matching 25 para classificar documentos com base na frequência de termos e na saturação de comprimento, oferecendo precisão de correspondência de palavras-chave padrão do setor. Essa extensão é compatível com o PostgreSQL 17 ou mais recente. Para mais informações, consulte Criar e gerenciar um índice BM25.

As implementações de pesquisa mais eficientes geralmente combinam a pesquisa de texto completo usando índices RUM e a pesquisa vetorial. Use a pesquisa híbrida para combinar os pontos fortes da compreensão semântica e da correspondência de palavra-chave exata, mesclando os conjuntos de resultados distintos para uma classificação abrangente.

Por exemplo, em um aplicativo de e-commerce, você pode usar primeiro a pesquisa de texto completo com RUM para encontrar produtos que contenham palavras-chave específicas, como "tênis de corrida", e usar a pesquisa vetorial para encontrar resultados com base na similaridade semântica com uma consulta mais detalhada do usuário, como "calçados confortáveis para treinamento de longa distância". Em seguida, o banco de dados combina os resultados classificados de ambos os componentes de pesquisa em uma única lista unificada usando o algoritmo Reciprocal Rank Fusion (RRF) para produzir uma classificação final.

Para mais informações sobre como usar essa abordagem híbrida, consulte Executar uma pesquisa híbrida de similaridade vetorial.

A seguir