Maison > base de données > tutoriel mysql > Comment puis-je trouver efficacement des chaînes similaires dans PostgreSQL ?

Comment puis-je trouver efficacement des chaînes similaires dans PostgreSQL ?

Barbara Streisand
Libérer: 2025-01-06 03:51:40
original
572 Les gens l'ont consulté

How Can I Efficiently Find Similar Strings in PostgreSQL?

Recherche efficace de chaînes similaires dans PostgreSQL

Intro : La recherche de chaînes similaires dans de grands ensembles de données peut rencontrer des problèmes de performances lors de l'utilisation méthodes conventionnelles. Cet article présente une solution qui accélère considérablement le processus de recherche en utilisant le module pg_trgm de PostgreSQL.

Utilisation de SET pg_trgm.similarity_threshold et de l'opérateur % :

La requête que vous avez fournie souffre de calculs de similarité excessifs. Pour améliorer l'efficacité, utilisez le paramètre de configuration SET pg_trgm.similarity_threshold et l'opérateur % :

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 approche exploite un index trigramme GiST, accélérant considérablement la recherche.

Utilisation de Functional Index :

Pour améliorer davantage les performances, envisagez d'utiliser des index fonctionnels pour préfiltrer les correspondances possibles avant la jointure croisée. Cela réduit le nombre de calculs de similarité requis, comme le démontre la requête suivante :

CREATE FUNCTION first_char(text) RETURNS text AS $$
  SELECT substring(, 1, 1);
$$ LANGUAGE SQL;

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

Conclusion :

En employant le module pg_trgm, SET pg_trgm .similarity_threshold, l'opérateur % et les index fonctionnels, vous pouvez considérablement améliorer les performances de recherche de chaînes similaires dans PostgreSQL, même pour les grands ensembles de données.

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!

source:php.cn
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