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.
Conceitos principais da pesquisa de texto completo
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 umtsvectorcorresponde a umtsquery, 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.
Combinar pesquisa semântica e de texto completo
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
- Saiba como criar e consultar um índice RUM.
- Saiba como criar e gerenciar um índice BM25.
- Saiba como executar uma pesquisa híbrida de similaridade vetorial.