La recherche en texte intégral (FTS) dans AlloyDB pour PostgreSQL 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 vides courants tels que "le" et en mettant en correspondance différentes formes d'un mot, telles que "courir", "courant" ou "couru".
En plus des index GIN et GiST PostgreSQL standards, AlloyDB fournit l'extension rum pour une recherche en texte intégral hautes performances sur toutes les versions de PostgreSQL compatibles avec AlloyDB (PostgreSQL 18 et versions antérieures), ainsi que le classement de pertinence Best Matching 25 (BM25) sur PostgreSQL 17 et versions ultérieures.
Concepts fondamentaux de la recherche en texte intégral
Pour implémenter efficacement la recherche en texte intégral (FTS), 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 compilation de l'index analyse ce document pour associer des mots (ou des 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 :
- Diviser le texte en jetons.
- Supprimer les mots vides courants.
- Normalisation des mots à leur forme racine. Par exemple, "courir" est le lexème de "courir", "cours", "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 untsvectorcorrespond à untsquery, 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 intégré. Le choix de l'index dépend de l'équilibre entre la vitesse de recherche, le temps de 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 l'une des 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 toutes les versions de PostgreSQL compatibles avec AlloyDB (PostgreSQL 18 et versions antérieures). 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.
Combiner la recherche en texte intégral et la recherche sémantique
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 d'un 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 en une seule liste 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.
Étapes suivantes
- Découvrez comment créer et interroger un index RUM.
- Découvrez comment créer et gérer un index BM25.
- Découvrez comment exécuter une recherche hybride de similarité vectorielle.