Rechercher : dans
Par :

MySQL:Recherche efficace d'un mot dans une ta

Dernière réponse le 3 fév 2009 à 09:22:36 JLinho, le 23 jun 2004 à 11:06:24 
 Signaler ce message aux modérateurs

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.

Meilleures réponses pour « MySQL:Recherche efficace d'un mot dans une ta » dans :
Réinitialiser le mot de passe root de MySQL VoirQue ce soit lors de la première installation ou après la perte du mot de passe principal de MySQL, il est nécessaire de pouvoir modifier le mot de passe administrateur (root) de MySQL. Vous avez perdu le mot de passe root de MySQL ? Pour pouvoir...
Comment utiliser efficacement les moteurs de recherche ? VoirComment utiliser efficacement les moteurs de recherche ? Si Internet représente une masse d'informations colossale, il peut être fastidieux de trouver le renseignement que vous recherchez. Pourtant, il est possible d’optimiser ses requêtes pour...
PHP - Créer un moteur de recherche VoirIdée générale Le moteur de recherche ci-dessous ne correspond qu'à une idée possible de moteur de recherche simple, ne gérant qu'un seul mot clé. Le concept du fonctionnement de ce moteur est de créer une base de donnée contenant les mots clés de...

1

GallyNet, le 23 jun 2004 à 13:20:27
  • +2

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%" ...

Répondre à GallyNet

2

iBook, le 23 jun 2004 à 14:26:02

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

Répondre à iBook

3

JLinho, le 23 jun 2004 à 14:58:51

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 ....

Répondre à JLinho

8

ric, le 24 jun 2004 à 08:26:42

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.

Répondre à ric

4

iBook, le 23 jun 2004 à 15:25:43

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

Répondre à iBook

5

GallyNet, le 23 jun 2004 à 18:38:26

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 ?)

Répondre à GallyNet

6

edisonn, le 23 jun 2004 à 21:29:16

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.

Répondre à edisonn

7

iBook, le 24 jun 2004 à 08:25:53

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")

Répondre à iBook

9

JLinho, le 24 jun 2004 à 09:41:34

Bon je devrais pouvoir m'en sortir maintenant...
Merci à tous pour votre aide !!!

Répondre à JLinho

10

Ludwig, le 24 mar 2008 à 09:00:20

Essaye un interclassement ‘latin1_swedish_ci’ pour ta table et tes champs recherchés.
Tes requêtes ignoreront alors la casse et les accents.

Répondre à Ludwig

11

alexv, le 10 avr 2008 à 14:09:40

La meilleur des solutions est la tienne Ludwig merci du tuyau

Répondre à alexv

12

 sparkendefugl, le 3 fév 2009 à 09:22:36

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

Répondre à sparkendefugl