Moteur de recherche

ViPHP
ViPHP | 5462 Messages

27 mai 2010, 15:44

tu peux paramétrer ca ici : http://dev.mysql.com/doc/refman/5.0/fr/ ... uning.html
tu peux faire aussi un FULLTEXT sur ta description, t'aura juste a le rajouter dans MATCH

Eléphant du PHP | 388 Messages

27 mai 2010, 16:08

je viens de voir ceci

FULLTEXT. (Cette variable n'existe que pour la version 4.0 de MySQL) La valeur par défaut de cette option est de 4 caractères. Modifiez la, puis recompilez les index FULLTEXT. Par exemple, si vous souhaitez pouvoir rechercher des mots de 3 caractères, vous pouvez donner à cette variable la valeur suivante dans le fichier d'options :

[mysqld]
ft_min_word_len=3

Puis, relancez le serveur et recompilez vos index FULLTEXT.

Recompilez les index FULLTEXT : cela veut dire faut que recommence la dermarche avec titreannonce a mettre en full text ?
Le fichier option correspond se situe ou dans ma phpmyadmin ?

En tout cas merciiiiii

Eléphant du PHP | 388 Messages

27 mai 2010, 18:06

pour prendre en compte la description j'ai fait cela comme requete
<?php
include ('php/connect.php');



echo "
<html>

<head>

<title>Résultat de la recherche</title>

</head>

<body>";

if (($Mot == "")||($Mot == "%")) {
// Si aucun mot clé n'a été saisi,
// le script demande à l'utilisateur
// de bien vouloir préciser un mot clé

	echo "
	Veuillez entrer un mot clé s'il vous plaît!
	<p>";

}

else {
// On selectionne les enregistrements contenant le mot clé
// dans les keywords ou le titre
	$query = "SELECT DISTINCT COUNT(titreannonce) FROM annonces WHERE MATCH (titreannonce,descriptionannonce)  AGAINST ('$Mot')";
 $result = mysql_query($query) or exit($query . '<br />' .  mysql_error());
	$result = mysql_query($query);

	$row = mysql_fetch_row($result);

	$Nombre = $row[0];

// Si aucun enregistrement n'est retourné,
// on affiche un message adéquat
if ($Nombre == "0") {
	echo "
	<h2>Aucun résultat ne correspond à votre recherche</h2>

	<p>

	";

}

// Sinon, on affiche le nombre d'enregistrements correspondant
// et les résultats eux-mêmes
else {
	$query = "SELECT distinct titreannonce,descriptionannonce FROM annonces
	WHERE MATCH (titreannonce,descriptionannonce)  AGAINST ('$Mot')
	ORDER by titreannonce ASC";

	$req = mysql_query($query);

	// Si un seul enregistrement est trouvé, on affiche un message au singulier
	if ($Nombre == "1") {
	echo "
	<a name=\"#resultat\"><h2>Résultat: Un article trouvé</h2></a>

	<p>";

	}
	// Dans le cas contraire le message est au pluriel...
	else {
	echo "
	<a name=\"#resultat\"><h2>Résultat: $Nombre articles trouvés</h2></a>

	<p>";

	}
	
	while($data=mysql_fetch_array($req))
	{
?>

<table>		
		   
	<tr>
			
		<td class="titreannonce"colspan="2"><?php echo $data ['titreannonce']; ?></td>		
				
    </tr>
	<tr>
			
		<td class="descriptionannonce"colspan="2"><?php echo $data ['descriptionannonce']; ?></td>		
				
    </tr>
	
    
  
 </table>
<?php
	}
}

}

// on ferme la base
mysql_close();

?>

</body>

</html>
mais le probléme quand j'éxécute la requete sql me sort #1191 - Can't find FULLTEXT index matching the column list
j'ai mit egalement description annonce en fulltext

et pour cela

Code : Tout sélectionner

FULLTEXT. (Cette variable n'existe que pour la version 4.0 de MySQL) La valeur par défaut de cette option est de 4 caractères. Modifiez la, puis recompilez les index FULLTEXT. Par exemple, si vous souhaitez pouvoir rechercher des mots de 3 caractères, vous pouvez donner à cette variable la valeur suivante dans le fichier d'options : [mysqld] ft_min_word_len=3
j'ai pas accées a mon fichier d'option connaisser vous un autre moyen pour y acceder ?
donc j'ai fait un show variables, et celle ci est bien a 4.
j'ai essayé de modifier comme cela
SET ft_min_word_len = 2;
mais cela donne rien erreur

Eléphant du PHP | 388 Messages

28 mai 2010, 10:30

Je me permet de cloturer se post et de le reposter plus lisiblement dans la bonne section :wink: