Moteur de recherche full text PHP/MySQL

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Moteur de recherche full text PHP/MySQL

par dmx-moteur » 27 mai 2005, 12:15

Je donne rendez-vous à ceux qui sont interessé par ce problème et la recherche full text dans le forum "débuter en PHP" avec mon code final et la solution encore partielle de ce moteur de recherche

par Invité » 26 mai 2005, 17:04

La solution a été trouvée : problème lors de la valeur par défaut "Tous" dans la page de recherche : fc par ex. au mieu de fczz !

Je continue cependant sur mon pb : il me faut maintenant gérer le problème des accents...

par dmx-moteur » 26 mai 2005, 14:12

Merci à tous de vos réponse. La solution MATCH ... AGAINST est tout à fait ça... Il me reste cependant un petit problème à gérer :

Code : Tout sélectionner

SELECT DATE, INTITULE, CODE_REG FROM offres WHERE MATCH(INTITULE, DESCRIPTIF, NOM) AGAINST ('voiture') AND (CODE_FONC LIKE 'fc12') AND (CODE_REG LIKE 're01') AND (CODE_TYP LIKE 'ty01');
fonctionne parfaitement lors du test dans Mysql.

Mais dans la page PHP :

Code : Tout sélectionner

SELECT DATE, INTITULE, CODE_REG FROM offres WHERE MATCH(INTITULE, DESCRIPTIF, NOM) AGAINST ('$recherche') AND (offres.CODE_FONC LIKE '$VARfonction') AND (offres.CODE_REG LIKE '$VARregion') AND (offres.CODE_TYP LIKE '$VARtype_offre');
ne fonctionne pas : aucun résultat à la requete quelque soit la recherche...

par pjl » 25 mai 2005, 19:25

Ou commet faire un méga moteur de recherche en 2s. 8)

par Cyrano » 25 mai 2005, 18:52

Je vais me coucher plus savant ce soir, je ne connaissais pas la technique MATCH / AGAINST :oops:

par pjl » 25 mai 2005, 18:18

je ne vois pas pourquoi tu dois concaténer pour faire une recherche sur plusieurs champs.

de mon coté, ca marche très bien avec MATCH sur 4 champs en même temps.

par Cyrano » 25 mai 2005, 16:54

C'est surprenant: le seul point que je pourrais reprocher au code, c'est une concaténation mal faite pour la requête qui devrait être:
$query_Recordset1 = "SELECT * FROM annonces WHERE CONCAT(INTITULE, DESCRIPTIF, NOM) LIKE '". $recherche ."' AND offres.CODE_FONC LIKE '". $VARfonction ."' AND offres.CODE_REG LIKE '". $VARregion ."' AND offres.CODE_TYP LIKE '". $VARtype_offre ."'";
J'ai également enlevé des parenthèses qui n'ont pas lieu d'être à priori.

Question: si tu mes précisément les caractéristiques d'un article qui est dans la base, il ne sort pas du tout ?

Moteur de recherche full text PHP/MySQL

par dmx-moteur » 25 mai 2005, 16:37

Merci de cette réponse. En fait je code "à la main" pour les interfaces de recherche...
Je suis allé voir. Cela correspond à ce que je souhaite faire mais là où ça se complique un peu c'est que je veux une recherche multicritères dans différents champs. Je dois donc concatener plusieurs champs. Puis mettre les différents mots dans un tableau via explode(). Voici mon code de la page de résultats pour tester la concatenation (Interface page précédente avec liste déroulantes non liées) :
// Pour rechercher sur l'option "tous"
$VARfonction = $_POST['VARfonction'];
$VARregion = $_POST['VARregion'];
$VARtype_offre = $_POST['VARtype_offre'];
 if ($VARfonction == "fczz") $VARfonction="fc%";
 if ($VARregion == "rezz") $VARregion="re%";
 if ($VARtype_offre == "tyzz")  $VARtype_offre="ty%";
$recherche = $_POST['recherche'];

mysql_select_db($database_mabase, $mabase);
$query_Recordset1 = "SELECT * FROM annonces WHERE CONCAT(INTITULE, DESCRIPTIF, NOM) LIKE '$recherche' AND (offres.CODE_FONC LIKE '$VARfonction') AND (offres.CODE_REG LIKE '$VARregion') AND (offres.CODE_TYP LIKE '$VARtype_offre')";
$Recordset1 = mysql_query($query_Recordset1, $emploi) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
Sur la page de recherche, le formulaire comporte 4 éléments de formulaire :

Code : Tout sélectionner

<fieldset> <br> <label>Mots cl&eacute;s :</label> <input name="recherche" type="text" class="input" id="recherche" size="30"><br><br> <label>Fonctionnalités :</label> <select name="VARfonction" class="select" id="VARfonction"> <option value="fc" selected>Toutes les Fonctionnalités</option> <?php //code de la liste ?> </select><br><br> <label>Région : </label> <select name="VARregion" class="select" id="VARregion"> <option value="re" selected>Toutes les régions</option> <?php //code de la liste ?> </select><br><br> <label>Type :</label> <select name="VARtype_offre" class="select" id="VARtype_offre"> <option value="ty" selected>Tous</option> <option value="ty01">Offres</option> <option value="ty02">Demandes</option> </select>
Le problème c'est que, bien que je n'ai pas d'erreur sur la page, aucune recherche ne fonctionne.

par pjl » 25 mai 2005, 15:47

La doc officielle de MySQL pour la recherche full-text.
Tout y est expliqué : conception de la table et requête à construire.

http://dev.mysql.com/doc/mysql/fr/fulltext-search.html

PS : je te déconseille d'utiliser Dreamweaver pour ce genre de boulot.

Moteur de recherche full text PHP/MySQL

par dmx-moteur » 25 mai 2005, 11:46

Bonjour,

Je cherche à faire via Dreamweaver un moteur de recherche pour mon site en utilisant PHP/MySQL. Je souhaite utiliser la méthode proposée dans ce tutorial moteur de recherche pour Dreamweaver/ASP/Access.

Mon problème est que ne sais pas faire dans MySQL l'équivalent d'une "table" de requête ACCESS. Je souhaite en fait concatener divers champs de diverses tables pour permettre la recherche...

Merci à tous ceux qui pourrait me donner une info la dessus.