Présentation de la recherche en texte intégral

La recherche en texte intégral vous permet d'identifier les documents en langage naturel qui répondent à une requête. Cette approche est plus efficace que la correspondance de chaînes standard, car elle tient compte des nuances linguistiques, par exemple en ignorant les mots courants comme "le" et en faisant correspondre différentes formes d'un mot, comme "courir", "course" ou "couru".

AlloyDB pour PostgreSQL est compatible avec toutes les fonctionnalités de recherche en texte intégral. Outre la compatibilité avec les index GIN et GiST, AlloyDB fournit également l'extension RUM pour une recherche en texte intégral hautes performances sur PostgreSQL 17 ou version antérieure, et le classement par pertinence Best Matching 25 (BM25) sur PostgreSQL 17 ou version ultérieure.

Pour mettre en œuvre efficacement la recherche en texte intégral, vous devez comprendre comment PostgreSQL traite et recherche du texte. L'unité de recherche, un document, est généralement une colonne de texte ou une combinaison de colonnes d'une ligne. Le processus de création d'index analyse ce document pour associer des mots (ou lexèmes, la forme de base d' un mot) à la ligne.

Ce processus implique un pipeline de prétraitement qui transforme le texte brut en un format interrogeable en procédant comme suit :

  • Division du texte en jetons.
  • Suppression des mots vides courants.
  • Normalisation des mots à leur forme racine. Par exemple, "courir" est le lexème de "courir", "course", "courant" et "couru".

L'utilisation de la recherche en texte intégral nécessite également de vous familiariser avec les types de données spécialisés, les opérateurs et les différentes stratégies d'indexation, y compris les index PostgreSQL intégrés et les index RUM hautes performances.

PostgreSQL utilise deux types de données principaux et un opérateur de correspondance pour gérer la recherche en texte intégral :

  • tsvector: représente un document dans un format interrogeable, sous la forme d'une liste triée de lexèmes distincts.
  • tsquery: représente les termes de recherche, y compris les opérateurs booléens qui vous permettent de combiner des lexèmes.
  • @@: vérifie si un tsvector correspond à un tsquery, ce qui permet d'effectuer des recherches linguistiques.

AlloyDB est compatible avec tous les types d'index pour la recherche en texte intégral compatibles avec PostgreSQL. Le choix de l'index dépend de l'équilibre entre la vitesse de recherche, la durée de la compilation de l'index, la vitesse de mise à jour et les fonctionnalités de recherche spécifiques requises, telles que la recherche d'expressions ou le classement par pertinence.

Pour optimiser la pertinence et la précision de la recherche, vous pouvez également choisir parmi les options suivantes :

  • Index RUM : améliore les index GIN standards en stockant les informations de position directement dans l'index, ce qui vous permet d'effectuer des recherches d'expressions et un classement par pertinence plus rapides sans accéder aux données de la table. Cette extension est compatible avec PostgreSQL 17 ou version antérieure. Pour en savoir plus, consultez Créer et gérer un index RUM.
  • Index BM25 : implémente l'algorithme probabiliste Best Matching 25 pour classer les documents en fonction de la fréquence des termes et de la saturation de la longueur, offrant ainsi une précision de correspondance des mots clés conforme aux normes du secteur. Cette extension est compatible avec PostgreSQL 17 ou version ultérieure. Pour en savoir plus, consultez Créer et gérer un index BM25.

Les implémentations de recherche les plus puissantes combinent souvent la recherche en texte intégral à l'aide d'index RUM et la recherche vectorielle. Utilisez la recherche hybride pour combiner les avantages de la compréhension sémantique et de la correspondance exacte des mots clés, en fusionnant les ensembles de résultats distincts pour un classement complet.

Par exemple, dans une application d'e-commerce, vous pouvez d'abord utiliser la recherche en texte intégral avec RUM pour trouver des produits contenant des mots clés spécifiques tels que "chaussures de course", puis utiliser la recherche vectorielle pour trouver des résultats basés sur la similarité sémantique avec une requête plus détaillée de l'utilisateur, telle que "chaussures confortables pour l'entraînement longue distance". La base de données fusionne ensuite les résultats classés des deux composants de recherche dans une liste unique et unifiée à l'aide de l'algorithme Reciprocal Rank Fusion (RRF) pour produire un classement final.

Pour en savoir plus sur l'utilisation de cette approche hybride, consultez Exécuter une recherche hybride de similarité vectorielle.

Étape suivante