Faire une recherche sur un champ avec une certaine tolérance

Faire une recherche sur un champ avec une certaine tolérance - SQL/NoSQL - Programmation

Marsh Posté le 04-03-2003 à 19:06:03    

Bonjour,
 
   J'aimerias savoir s'il est possible, en sql directement ou en faisant plusieurs requetes d'affiler, de faire un select sur un champ mais avec une certaine tolérrance , exemple :
 
une recherche avec comme critere : "toto" renverra aussi les réponses correspondant à : "totu", "tato" voir "tata" ...
 
Ma question n'est pas tres claire... je sais :D

Reply

Marsh Posté le 04-03-2003 à 19:06:03   

Reply

Marsh Posté le 04-03-2003 à 20:22:50    

regardes du côté de la fonction "like" et des expressions régulières, dans le SGBD que tu utilise.

Reply

Marsh Posté le 04-03-2003 à 21:30:15    

Cela dépends des SGBD.
 
Bon, pour tous, y'a le "like" avec les expressions régulières associées, mais c'est pas terrible.
 
Pour Oracle, tu as la fonction "SOUNDEX" qui permet de rechercher des mots qui se prononcent pareil que la valeur passée en paramètre (avec une reconnaissance phonétique basée sur l'anglais uniquement)
 
Pour SQL Server, tu peux te baser sur Index Server, qui te permet de faire des recherches sur des mots du même champ lexical, de la même famille, ou dont le nombre de caractères identiques est assez important.
 
MySQL supporte depuis peu un équivalent à Index Server.

Reply

Marsh Posté le 04-03-2003 à 21:35:35    

Par contre, ces différentes façons de faire des recherches sont très gourmandes.
 
Le LIKE est à proscrire pour des volumes de données importants, car c'est vraiment TRES lent.
 
Le SOUNDEX, je sais pas ce que ça donne, mais à priori, ça doit être assez rapide (faut le dire vite)
 
Les recherches basées sur Index Server ou l'équivalent de MySQL sont plus rapides, car se basent sur des indexes de mots et des dictionnaires qui ne sont pas générés au moment de la requête, mais par schédule. Par contre, la montée en charge est assez fables, à l'image des recommendations de M$ pour faire tourner un Index Server sous MSSQL (un quadri-processeur avec 512 Mo de RAM par CPU plus une chaine de disques en RAID 50 est conseillée notamment :D)
 
M'enfin bon, pour le coup de la roco de M$, c'est un peu large je crois, j'ai jamais eu de problème sur mon serveur, il suffit qu'il n'y ait pas 50000 ploucs qui font des requêtes en même temps ;) Et une dizaine de requêtes à la seconde sur mon bi-CPU avec 1 Go de RAM à l'époque et une table indexée de 300 Mo ne bouffait que 10% du CPU, avec aucun accès disque...

Reply

Marsh Posté le 04-03-2003 à 23:21:31    

juste pour dire que sql server dispose aussi de la fonction soundex

Reply

Marsh Posté le 05-03-2003 à 14:09:24    

merci pour l'info sur index-server, il y a des chance que j'utilise MySQL...
 
Au départ je pensait utiliser le "LIKE" mais il me faut un algo pour placer judicieusement les ? ou autre * dans l'expression a rechercher.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed