A pesquisa de texto completo (FTS, na sigla em inglês) no AlloyDB para PostgreSQL permite identificar documentos de 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 no PostgreSQL 17 e versões anteriores, e a classificação de relevância Best Matching 25 (BM25) no PostgreSQL 17 e versões mais recentes.
Conceitos básicos da pesquisa de texto completo
Para implementar a pesquisa de texto completo (FTS) de maneira eficaz, é necessário entender como o PostgreSQL processa e pesquisa texto. 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 texto bruto em um formato pesquisável:
- Dividindo o texto em tokens.
- Removendo palavras irrelevantes comuns.
- Normalizando palavras para a forma básica. 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 í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 oferece suporte a todos os tipos de índice para pesquisa de texto completo que o PostgreSQL integrado oferece. 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, também é possível 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 o PostgreSQL 17 ou versões 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 versões mais recentes. 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 poderosas geralmente combinam a pesquisa de texto completo usando índices RUM e a pesquisa vetorial. Use a pesquisa híbrida para mesclar 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 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 mescla os resultados classificados dos dois componentes de pesquisa em uma única lista unificada usando o algoritmo de Reciprocal Rank Fusion (RRF) para produzir uma classificação final.
Para mais informações sobre como usar essa abordagem híbrida, consulte Realizar uma pesquisa híbrida de similaridade vetorial.
A seguir
- Saiba como criar e gerenciar um índice RUM.
- Saiba como criar e gerenciar um índice BM25.
- Saiba como realizar uma pesquisa híbrida de similaridade vetorial.