Bonjour à tous,
Dans une table, on enregistre un grand nombre de substances dangereuses ou produits chimique (pas mal de colonnes pour permettre de bien les définir).
Le but de notre recherche est que pour une chaine de recherche "metil" l'item nommé "Triméthyl-butane" soit renvoyé (et d'autres bien sur).
Actuellement, nous effectuons la recherche en fonction d'option (accent, casse) directement dans le code métier (en C#). On récupère tous les items de la base et on effectue la comparaison en C#. La recherche approchante n'est pas encore gérée.
Suite à un grand ajout d'items dans notre base et par soucis de performance, nous aimerions améliorer notre select pour faire le tri grâce au moteur SQL.
Personnellement, plutot que faire un tri net et précis, je serais plus pour faire un tri primaire en SQL, qui limiterait le nombre d'items à traiter niveau métier. Mais je ne sais pas si c'est réalisable et surtout ça ne résoud pas le soucis principal de la recherche approchante.
J'avais étudié le Soundex (merci à l'auteur ) il y a peu de temps. C'est un bon algorithme, sauf que dans mon cas le fait qu'il garde la première lettre d'un mot pour sa valeur résultat, entraine qu'on ne verra pas "metil" dans "triméthyl", alors qu'il me renvoie bien le même résultat pour "metil" et "méthyl".
Est ce que faire les tests au niveau SQL ne fait pas perdre trop de temps ? (j'ai testé aussi de ramener les options accent et casse dans le moteur SQL, mais remplacer les accents dans toutes les chaines semble faire perdre pas mal de temps).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 select soundex('methyl'), soundex('metil'), soundex('triméthyl') from dual; Résultat : M340 M340 T653
Est ce qu'un autre algorithme de phonétique pourrait m'aider sans plomber les performances ?
Voyez vous d'autres solutions à mes problèmes ?
Je vous remercie par avance.
Partager