Maison > base de données > tutoriel mysql > Comment le module pg_trgm de PostgreSQL peut-il trouver efficacement des chaînes similaires dans de grands ensembles de données ?

Comment le module pg_trgm de PostgreSQL peut-il trouver efficacement des chaînes similaires dans de grands ensembles de données ?

Patricia Arquette
Libérer: 2025-01-05 12:29:40
original
617 Les gens l'ont consulté

How Can PostgreSQL's pg_trgm Module Efficiently Find Similar Strings in Large Datasets?

Recherche rapide de chaînes similaires avec PostgreSQL

L'une des exigences courantes en matière de récupération de texte est de trouver des chaînes similaires à une chaîne d'entrée donnée. . PostgreSQL fournit le module pg_trgm à cet effet. Cependant, lorsqu'il s'agit de grands ensembles de données, l'approche par force brute consistant à calculer les scores de similarité pour chaque paire de chaînes peut devenir inefficace.

L'approche conventionnelle consiste à créer un index GiST sur la colonne de nom en utilisant gist_trgm_ops comme opérateur d'index. . Le problème avec cette approche est qu'elle nécessite de calculer des scores de similarité pour chaque paire d'éléments, ce qui entraîne une complexité temporelle quadratique.

Une solution plus efficace consiste à utiliser l'opérateur % fourni par pg_trgm . En définissant le paramètre pg_trgm.similarity_threshold sur une valeur prédéfinie (par exemple, 0,8), l'optimiseur peut utiliser l'index du trigramme GiST pour filtrer les paires candidates qui sont inférieures au seuil de similarité spécifié. Cela réduit considérablement le nombre de calculs de similarité requis et améliore les performances des requêtes.

SET pg_trgm.similarity_threshold = 0.8;

SELECT similarity(n1.name, n2.name) AS sim, n1.name, n2.name
FROM   names n1
JOIN   names n2 ON n1.name <> n2.name
               AND n1.name % n2.name
ORDER  BY sim DESC;
Copier après la connexion

Cette requête optimisée utilise l'opérateur % pour pré-filtrer les paires candidates avant de calculer les scores de similarité, améliorant ainsi considérablement les performances des requêtes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal