Création
d'entreprise
Posez votre question Signaler

MySQL:Recherche efficace d'un mot dans une ta

JLinho - Dernière réponse le 22 déc. 2011 à 16:49
Salut à tous,

J'aimerais créer un petit moteur de recherche sur une Base de donnée.
Plus précisément, l'utilisateur rentre un mot et doit obtenir en retour tous les enregistrements (lignes de la table) dont un des champs ( au moins) contient le mot spécifié.

Les tables étant assez lourdes, il faut que ce soit assez efficace comme méthode. Un autre problème, c'est la casse et les accents:
Par exemple si l'utilisateur entre: "cHéVâLieR" , les enregistrements contenant la sous chaine "chevalier" ou "CHEVALIER" dans un de leurs champs doivent être détectés.
Lire la suite 

MySQL:Recherche efficace d'un mot dans une ta »

14 réponses
Réponse
+3
moins plus
Pour la casse tu peut déjà utilisé l'opérateur LIKE, il te retrouvera plusieur mots sans tenir compte de la casse (majuscule et minuscule) mais je sais pas pour les voyelle avec accent.
Sinon pour la recherche je pense que ca devrait marcher:
SELCT *
FROM maTable
WHERE champ1 LIKE "%monMot%" OR champ2 LIKE "%monMot%" ...
Ajouter un commentaire
Réponse
+2
moins plus
Salut,

En effet la creation d'un index est une bonne chose. Tu crée un index sur le syllable les plus courantes. Par exemple, si tu cree un index pour "va", alors chevalier se trouvera dedans.
Pour les accents, tu peux dupliquer les colonnes qui contiennent des accents en colonnes sans accent, sans caracteres speciaux, sans les articles et sans la ponctuation... pour une recherche plus rapide.
Ajouter un commentaire
Réponse
+0
moins plus
oué commence déjà par regardé la doc pour la commande "like" de mysql.
Ensuite tu peu également créer des index dans té tables et qui te permettent un gain consédérable de temps, mais sa prend aussi pas mal de mémoire sur ta bdd kan ta des grosses tables bien pleines
JLinho - 23 juin 2004 à 14:58
Pour les accents j'ai trouvé une astuce qui consiste à remplacer dans le mot recherché tous les voyelles accentués ou non par '_' , et puis j'utilise le LIKE...Par contre ça rique de donner pas mal de résultats en trop.... ( Au lieu de chercher batîment par exemple, il va chercher
%b_t_m_nt% , la ça va....mais si je cherche roseau, ça devient carrément n'importe quoi... car on recherche %r_s_ _ _% donc on va trouver 'rasoir' ou 'arrosoir' où d'autres anneries). Enfin bon c'est pas très satisfaisant...
Alors sinon c'est vrai qu'on peut toujours filtrer les résultats en PHP, mais il faut pas que le PHP travaille sur trop d'enregistrements...

Sinon iBook, je vois pas en quoi l'utilisation des Index va considérablement améliorer la vitesse des recherches, puisqu'il s'agit de rechercher en plein milieu de certains champs certains mots...à moins que j'aie mal pigé le principe des Indexs ....
ric - 24 juin 2004 à 08:26
Bonjour
Ne remplace que les caractères différents des minuscules, majuscules, chiffres (en gros ceux qui ne sont pas dans l'ASCII) et ainsi roseau restera roseau et bâtiment deviendra b_timent.
loko - 22 déc. 2011 à 16:49
pourquoi faire simple (et inefficace: avec '_' ca va faire des confusions entre les mots) quand on peut faire compliqué....
il suffit simplement de convertir le mot-clé en tranformant les ('â','â','à') en 'a', ('ë','ê','è','é'), en 'e' (idem pour i,o,u) ...
et ca marche.
ou sinon la solution de GallyNet
Ajouter un commentaire
Réponse
+0
moins plus
ben je c pas ce que contient exactement ta bdd, mé tu peu définir des mots clés (mots les plus souvent tapé par tes visiteurs) pour caractériser un texte. Tu met un index dessus et ca peut te faire gagner en rapididé de requète, mais bon.... ca vau ce que ca vau.... tout dépend de l'utilisation exacte de ton moteur
Ajouter un commentaire
Réponse
+0
moins plus
Tu peut utiliser les expressions regulieres pour le probleme avec les accents, dans le cas de" batîment":

SELECT * FROM maTable WHERE champ1 REGEXP "b[aâà]1t[îiï]m[eéè^é¨2]nt";

(pas sur du code mais il doit rssembleer a ca)
Par contre tu doit modifier le mot via t'on script (PHP ?)
Ajouter un commentaire
Réponse
+0
moins plus
oui ca pourrai etre une bonne idée : tu duplique la colone qui contient le texte a l'interieur duquel tu cherche tes mots (genre la colone "description" et "titre" pour un annuaire de site par exemple) et dans les colones dupliquées, tu met le meme texte, mais sans accent ni ponctuation("description_format" "titre_format" par ex.). Et pour tes recherches, ben tu cherchera directement dans le texte formaté ("description_format" "titre_format")
Ajouter un commentaire
Réponse
+0
moins plus
Bon je devrais pouvoir m'en sortir maintenant...
Merci à tous pour votre aide !!!
Ajouter un commentaire
Réponse
+0
moins plus
Essaye un interclassement ‘latin1_swedish_ci’ pour ta table et tes champs recherchés.
Tes requêtes ignoreront alors la casse et les accents.
alexv - 10 avril 2008 à 14:09
La meilleur des solutions est la tienne Ludwig merci du tuyau
sparkendefugl - 3 févr. 2009 à 09:22
Bonjour!

J'ai le même probléme.
Est-ce que quelqu'un pourrait m'expliquer la solution de ludwig, elle ne m'est pas trés parlante.

Merci d'avance,
Clément
inter - 15 févr. 2010 à 06:14
via phpmyadmin tu peux voir,
dans la base de données,
choisi une table,
sélectionne un changement de structure,
dans la colonne interclassement,
tu as la solution de ludwing qui est LATIN...
plus précisément c'est un jeux de caractère probablement compatible
pour jouer avec la casse/accent
Ajouter un commentaire
Ce document intitulé « MySQL:Recherche efficace d'un mot dans une ta » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?