Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/08/2007, 22h10   #1
Membre éprouvé
 
Inscription : août 2007
Messages : 496
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations forums :
Inscription : août 2007
Messages : 496
Points : 447
Points : 447
Par défaut Calcul de la pertinence des mots dans un moteur de recherche

Bonjour,

Je cherche a savoir comment faire pour trier les résultats d'une requête selon la pertinence des mots.

Si par exemple je tape ciel et soleil dans le formulaire de recherche je voudrai que les premiers résultats a s'afficher traite ces deux mots ensemble et que les suivant traite indépendemment les autres mots.

En clair un résultats contenant :

Citation:
1. Ciel et Soleil

2. Ciel

3. Soleil
Un autre exemple avec chat souris chien

Citation:
1. Chat Souris Chien

2. Chat Souris

3. Souris Chien

4. Chat Chien

5. Chat

6. Chien

7. Souris
Mes exemples sont un peu simple mais résument bien ce que je désire faire

Cordialement
kilian67 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/08/2007, 22h19   #2
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
Code :
1
2
3
4
 
...
WHERE MATCH('ciel soleil') AGAINST( ColonneTexte IN BOOLEAN MODE) > 0
ORDER BY MATCH('ciel soleil') AGAINST( ColonneTexte IN BOOLEAN MODE)
Le résultat de MATCH sera le nb de mots trouvés.
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2007, 00h14   #3
Membre éprouvé
 
Inscription : août 2007
Messages : 496
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations forums :
Inscription : août 2007
Messages : 496
Points : 447
Points : 447
Citation:
Envoyé par Antoun Voir le message
Code :
1
2
3
4
 
...
WHERE MATCH('ciel soleil') AGAINST( ColonneTexte IN BOOLEAN MODE) > 0
ORDER BY MATCH('ciel soleil') AGAINST( ColonneTexte IN BOOLEAN MODE)
Le résultat de MATCH sera le nb de mots trouvés.
Voici la partie de code que je pense devoir modifier mais comment ?

Code :
1
2
3
4
5
       $sql = "SELECT SQL_CALC_FOUND_ROWS $Champs FROM $Table WHERE " . (!strcasecmp($EtOu, 'AND') ? '1=1' : '1<>1');
        foreach ($tab AS $v) {
            $sql .= " $EtOu $Cles LIKE '%%" . mysql_real_escape_string($v) . "%%' ";
        }
        $sql .= "ORDER BY $Ordre ASC LIMIT %d,%d";
Sachant que les mots sont collecter par
kilian67 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2007, 10h54   #4
Membre éprouvé
 
Inscription : août 2007
Messages : 496
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations forums :
Inscription : août 2007
Messages : 496
Points : 447
Points : 447
Bon voila j'ai essayer plusieurs choses mais ça ne marche pas.

Comment on fait avec la partie du code plus haut pour y insérer la fonction MATCH
kilian67 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2007, 11h04   #5
Expert Confirmé
 
Avatar de berceker united
 
Développeur informatique
Inscription : février 2005
Messages : 2 982
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2005
Messages : 2 982
Points : 3 567
Points : 3 567
il y a des fonctionnalité de mysql qui permette de faire recherche avec le niveau de pertinence. Full-text
http://dev.mysql.com/doc/refman/5.0/...xt-search.html
ça peut t'aider je pense.
__________________
Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...
berceker united est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2007, 17h31   #6
Membre éprouvé
 
Inscription : août 2007
Messages : 496
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations forums :
Inscription : août 2007
Messages : 496
Points : 447
Points : 447
Citation:
il y a des fonctionnalité de mysql qui permette de faire recherche avec le niveau de pertinence. Full-text
http://dev.mysql.com/doc/refman/5.0/...xt-search.html
ça peut t'aider je pense.
Je suis allé voir sur le site indiquer plus haut et désoler mais je n'y arrive toujours pas.

Je ne sais pas comment intégré la recherche en fulltext dans ce code

Code :
1
2
3
4
5
6
7
8
$sql = "SELECT SQL_CALC_FOUND_ROWS $Champs FROM $Table WHERE " . (!strcasecmp($EtOu, 'AND') ? '1=1' : '1<>1');
        foreach ($tab AS $v) {
            $sql .= " $EtOu $Cles LIKE '%%" . mysql_real_escape_string($v) . "%%' ";
        }
        $sql .= "ORDER BY $Ordre ASC LIMIT %d,%d";
        $_SESSION['sql'] = $sql;
        $_SESSION['nb'] = $nb;
        $_SESSION['Q'] = $Q;
kilian67 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h14.


 
 
 
 
Partenaires

Hébergement Web