[php] moteur de recherche

moteur de recherche [php] - PHP - Programmation

Marsh Posté le 10-05-2005 à 16:43:57    

Voilà je suis en train de coder un petit moteur de recherche pour mon futur site mais j'ai une petite question : tout d'abord le code :
 

   
 
$rqt = "SELECT * FROM news WHERE titre OR data LIKE '%$champ%' ORDER BY ID DESC";
 
   include("connect.php" );
   
   if(!($dbResult = mysql_query($rqt, $dbLink)))
   {
   print("Impossible d'effectuer la requete !\n" );
   exit();
   }
   
   $search = mysql_fetch_object($dbResult);
   if($search != "" )
   {  
       
      if(!($dbResult = mysql_query($rqt, $dbLink)))
      {
      print("Impossible d'effectuer la requete !\n" );
      exit();
      }
       
    include("structure_haut.php" );
       
    print("R&eacute;sultats de la recherche sur : <b>$champ</b>&nbsp;<br />\n" );
   
    while($search = mysql_fetch_object($dbResult))
    {
                                }
           }
           else
           {
            echo "pas de resultat";
           }


 
Le problème (qui n'en est pas un en soit) c'est que je suis obligé de faire deux fois ma requète. Une première fois pour voir si j'ai des résultats et une seconde fois pour les afficher sinon ca ne fonctionne pas. Est-ce que vous auriez une idée pour n'avoir qu'une seule requète à faire ?
 
Merci  :)


Message édité par brains le 10-05-2005 à 16:45:12

---------------
Débuter la moo chez les moants@HFR | Nikon D800 | On ne fait pas un calin chaste à une pute !, Lapattefolle
Reply

Marsh Posté le 10-05-2005 à 16:43:57   

Reply

Marsh Posté le 10-05-2005 à 16:51:14    

ta logique est bizarre, car si tu as des resultats => tu les affiches, pas besoin de 2 requetes
 
sinon j'espère que tu n'as pas trop d'enregistrement dans ta base, car LIKE '%$champ%' va faire un full scan

Reply

Marsh Posté le 10-05-2005 à 16:53:13    

soju a écrit :

ta logique est bizarre, car si tu as des resultats => tu les affiches, pas besoin de 2 requetes
 
sinon j'espère que tu n'as pas trop d'enregistrement dans ta base, car LIKE '%$champ%' va faire un full scan


 
sinon il y a une autre solution que LIKE  ?


---------------
Débuter la moo chez les moants@HFR | Nikon D800 | On ne fait pas un calin chaste à une pute !, Lapattefolle
Reply

Marsh Posté le 10-05-2005 à 17:05:14    

brains a écrit :

sinon il y a une autre solution que LIKE  ?

indexation de mot-clefs dans une table par exemple

Reply

Marsh Posté le 10-05-2005 à 17:39:22    

Perso je procede ainsi:
 
-Une table des mots clés avec leur longueur
-Une table des occurences de ce mot
 
-Quand j'ai un mot precis à rechercher, je fais un egal sur les mots  clés et jointure.
 
-Quand j'ai un mot commencant par, je fais un like sur le mot clés et je filtre sur les mots clés de plus de la longueur du mot cherché -1.
 
Bien sur, il faut indexer les mots et occurences. La recherche est rapide, mais la mise en place est plus lourde. Et ca prend plus de place.
 
 
Pour exemple, j'ai 20000 mots referencés, 3 500 000 occurences de mots. Une recherche du style "+toto -titi +ta%" prend 60ms sur une titine à 700Mhz, et 400Mo de ram.


---------------
MZP est de retour
Reply

Marsh Posté le 10-05-2005 à 17:42:57    

cinocks a écrit :

Perso je procede ainsi:
 
-Une table des mots clés avec leur longueur
-Une table des occurences de ce mot
 
-Quand j'ai un mot precis à rechercher, je fais un egal sur les mots  clés et jointure.
 
-Quand j'ai un mot commencant par, je fais un like sur le mot clés et je filtre sur les mots clés de plus de la longueur du mot cherché -1.
 
Bien sur, il faut indexer les mots et occurences. La recherche est rapide, mais la mise en place est plus lourde. Et ca prend plus de place.
 
 
Pour exemple, j'ai 20000 mots referencés, 3 500 000 occurences de mots. Une recherche du style "+toto -titi +ta%" prend 60ms sur une titine à 700Mhz, et 400Mo de ram.


 
mais quand tu postes une news par exemple comment tu fais pour indexer certains mots clés et pas d'autres ?


---------------
Débuter la moo chez les moants@HFR | Nikon D800 | On ne fait pas un calin chaste à une pute !, Lapattefolle
Reply

Marsh Posté le 10-05-2005 à 17:51:28    

Tu commences par nettoyer le texte.
 
Tu ne gardes que les mots de plus de tant de caracteres.
 
Ensuite, ce que j'ai fait, je tiens à jour une liste de mots sans interet qui ne
seront pas listés. Cette liste est dans un fichier que je charge dans un tableau. J'ai un tableau de chaque coté. Il me suffit de garder ce qui est dans le premier qui n'est pas dans le second.
 
C'est perfectible pour le moment. Mais le nombre de mots utilisés dans le langage courant est limité. Le reste correspond generalement à des references.


---------------
MZP est de retour
Reply

Sujets relatifs:

Leave a Replay

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