0

Existe-t-il un moyen d'augmenter la tolérance aux pannes de la fonction SQL SOUNDEX lorsqu'elle est utilisée pour la correspondance de chaînes floues? J'utilise ceci pour rechercher des noms de fournisseurs. Ce que j'ai:Augmenter la tolérance aux pannes pour SQL Soundex pour la correspondance de chaîne floue

WHERE 
    SOUNDEX(@SearchTerm) = SOUNDEX(s.Name) 

Cela fonctionne dans une certaine mesure, mais je veux augmenter un peu la tolérance aux pannes. Par exemple:

SOUNDEX('test') = T230 
SOUNDEX('tet') = T300 
SOUNDEX('tets') = T320 
SOUNDEX('tes') = T200 

Idéalement, j'aimerais que tous ces exemples correspondent. En outre, un léger problème est quand un nom de fournisseur est composé de 2 mots et les recherches de l'utilisateur par le second mot, cela fonctionne évidemment puisque la marche dépend de la première lettre du mot:

SOUNDEX('test supplier') = T230 
SOUNDEX('supplier') = S146 

A l'origine, je utilisait une bibliothèque de comparaison de chaînes floues dans l'application Web qui utilisait divers algorithmes de comparaison de chaînes approximatives, mais il s'avère que lorsque 20 personnes recherchent simultanément plus de 5000 fournisseurs, c'est trop pour le serveur Web. J'essaye maintenant de faire ceci dans une procédure stockée de sorte que la base de données renvoie seulement les résultats recherchés et pas la liste complète des fournisseurs à rechercher.

Répondre

1

Vous pouvez implémenter un fichier UDF et le déployer sur le serveur en utilisant SQL CLR integration. (Plus précisément: CLR Scalar-Valued Functions)

Je peux assurer cela fonctionne parce que je fais exactement la même chose et regarde plus de 350.000 lignes (sans aucun autre filtre) et cela fonctionne très vite. C'est une variante de l'algorithme de Damerau-Leventshein, donc un algorithme qui prend beaucoup de temps. La différence entre renvoyer toutes les lignes à l'application et les filtrer du côté de l'application, et effectuer le filtrage directement dans SQL Server est énorme.

Questions connexes