Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
988 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Recherche dans plusieurs tables/champs en fulltext et non full text :/

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Recherche dans plusieurs tables/champs en fulltext et non full text :/

n°1578180
bixibu
Ca ... c'est fait!
Posté le 22-06-2007 à 18:23:24  profilanswer
 

Salut ;)
 
J'ai un petit probleme pour l'implementation d'un moteur de recherche.
   
En gros la, mon moteur de recherche doit me renvoyer en sortie une liste de produit, plus ou moins pertinente se basant sur ces tables la :
 
table produits:
-id_produit
-name VARCHAR 100
-keywords FULLTEXT index
-description FULLTEXT index
 
table press
-id_press
-name  VARCHAR 100  
-description FULLTEXT index  
 
table artistes
-id_artist
-name  VARCHAR 100  
-description FULLTEXT index
 
Je dois rechercher dans ces tables les occurences de ce que l'utilisateur saisie dans le champs (peut etre un mot, 2 ou plus !)
 
Je commence tout juste à mettre le nez dedans et apres pas mal de recherches (qui ne traite que de recherches dans une seul table) voici où j'en suis, attention c'est crade
 

Code :
  1. $search = htmlentities(strip_tags($_POST["search_input"]),ENT_QUOTES,'UTF-8');
  2.  $array_score = array();
  3.  $req1 = "SELECT id_product, MATCH (name, description, keywords) AGAINST ('".$search."' IN BOOLEAN MODE) AS score
  4.       FROM product
  5.    WHERE MATCH (name, description, keywords) AGAINST ('".$search."' IN BOOLEAN MODE)
  6.    ";
  7.  $req2 = "SELECT id_product, MATCH (name, description) AGAINST ('".$search."' IN BOOLEAN MODE) AS score
  8.       FROM press
  9.    WHERE MATCH (name, description) AGAINST ('".$search."' IN BOOLEAN MODE)
  10.    ";
  11.  $req3 = "SELECT id_product, MATCH (name, description) AGAINST ('".$search."' IN BOOLEAN MODE) AS score
  12.       FROM product_feature
  13.    WHERE MATCH (name, description) AGAINST ('".$search."' IN BOOLEAN MODE)
  14.    ";
  15.  //éxécution de la recherche
  16.  $res_array[] = $db->query($req1);
  17.  $res_array[] = $db->query($req2);
  18.  $res_array[] = $db->query($req3);
  19.  //récupération et addition des score de chaques produits
  20.  //TODO: on pourrait d'ailleurs pondérer le score de chaque requete en fonction de son importance ? score du req1 (product)
  21.  // semble par exemple plus importante que le score de req2 (press)
  22.  foreach($res_array as $res){
  23.   if ($res !== FALSE){
  24.    foreach ($res as $result){
  25.     $array_score[$result->id_product] += $result->score;
  26.    }
  27.   }
  28.  }
  29.  //on trie les produits selon leur pertinence
  30.  arsort($array_score);
  31.  //a ce stade on a un array de score dont chaque entrée identifié par l'id du product
  32.  //on va donc maintenant relier ce tableau à un nom et une description de produit
  33.  if(count($array_score) > 0){
  34.   foreach ($array_score as $key=>$value){
  35.    $oProduct = new Product($key);
  36.    $oProduct = $oProduct->get();
  37.    $html .= "<h3>".$oProduct->id_product."-".$oProduct->name."</h3>";
  38.    $html .= "<p>Pertinence : ".$value."</p>";
  39.   }
  40.  }
  41.  else $html .= "pas de résultats";
  42.  $page->BODY = $html;


 
Ca m'affiche des pertinences de 0, 1 ou 2, des entiers quoi.. ca me parait vraiment pas super.. surtout que c'est surement à cause du MODE BOOLEAN je m'en doute..
Mais je suis obligé de m'en servir la car dans ma recherche j'inclu des champs qui ne sont pas indexé, pas en full text( les name) donc comment faire mieu ?
 
Sinon mon systeme de 3requets me parait barbare :p ya t'il une facon de plier ca en une seul requete pour aller piocher dans les 3 table s?
 
Merci ;)

mood
Publicité
Posté le 22-06-2007 à 18:23:24  profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Recherche dans plusieurs tables/champs en fulltext et non full text :/

 

Sujets relatifs
CSS et element textfusionner plusieurs cellules de l'entête d'un datagrid
sql loader (liste des champs dans le fichier de controle)[MySql] Fulltext qui foire
[CHMOD] Changer les droits DANS plusieurs dossiersRecherche entre deux dates avec un champs datetime
[Planning] Recherche d'un projet Open SourceRecherche script chat pour invité avec modération
Recherche aide pour programmation CSS/PHP 
Plus de sujets relatifs à : Recherche dans plusieurs tables/champs en fulltext et non full text :/


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR