mise en place d'un module de recherche sur mon site
12 messages • Page 1 sur 1
Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics
mise en place d'un module de recherche sur mon site
Bonjour, je suis en train (en tout cas, j'essaie...
) de mettre en place un module de recherche sur mon site... Pour cela je suis attentivement la doc mysql, qui est relativement claire, mais je rencontre des problèmes.
J'ai créé un table pour développer mon code, exactement la même que sur la doc... et j'ai fais un code simple pour tester.
Voici mon code:
Voici le message que j'ai:
Et cependant, les colonnes intéressées (title et body) ont bien les FULLTEXT index comme il est spécifié dans la doc mysql...
J'avoue que je ne comprends pas trop
J'ai créé un table pour développer mon code, exactement la même que sur la doc... et j'ai fais un code simple pour tester.
Voici mon code:
- Code: Tout sélectionner
<?php
if(!empty($_POST['source']))
{
$recherche=$_POST['source'];
echo'<h1>Recherche en cours</h1>';
echo'<form action="moteur.php" method="post" />
<input type="text" name="source">
<input type="submit" value="Chercher">
</form>';
$requete = (" SELECT *, MATCH(title,body) AGAINST('$recherche' WITH QUERY EXPANSION) AS score
FROM articles
WHERE MATCH(title,body) AGAINST('$recherche' WITH QUERY EXPANSION) ORDER BY score DESC ");
$resultat=mysql_query($requete,$connect) || die (mysql_error());
echo'<table>
<tr><td>SCORE</td><td>TITLE</td><td>ID</td></tr>';
while($donnees = mysql_fetch_array($resultat))
{
echo '<tr><td>'.$donnees['body'].'</td>
<td>'.$donnees['title'].'</td>
<td>'.$donnees['id'].'</td></tr>';
}
echo '</table>';
}
else
{
echo'<h1>Pas de recherche en cours</h1>';
echo'<form action="moteur.php" method="post" >
<input type="text" name="source">
<input type="submit" value="Chercher">
</form>';
}
Voici le message que j'ai:
Can't find FULLTEXT index matching the column list
Et cependant, les colonnes intéressées (title et body) ont bien les FULLTEXT index comme il est spécifié dans la doc mysql...
J'avoue que je ne comprends pas trop
-

biddybulle - WRInaute accro

- Messages: 1469
- Inscription: Lun Mai 30, 2005 21:55
Mysql error doit avoir raison
$requete = ("SELECT * FROM articles
WHERE MATCH(title,body) AGAINST('$recherche' WITH QUERY EXPANSION));
ca donne quoi avec cette requete
$requete = ("SELECT * FROM articles
WHERE MATCH(title,body) AGAINST('$recherche' WITH QUERY EXPANSION));
ca donne quoi avec cette requete
Je dit peut-être une bétise, mais je crois me souvenir que si tu a placé tes FULLTEXT avec PhPMYAdmin, ça ne fonctionne pas. Il ne faut pas les faire un par un mais bel et bien les 2 en même temps avec la requête SQL qui convient :
ALTER TABLE ta_table ADD FULLTEXT ( Champ1 , Champ2, ...)
Essaie et dis moi si ça fonctionne...
ALTER TABLE ta_table ADD FULLTEXT ( Champ1 , Champ2, ...)
Essaie et dis moi si ça fonctionne...
cette partie du problème est résolue...
Oui, en effet c'était ça, j'ai fais le type de requête avec les deux champs ensemble et le message n'apparaît plus
Voici ce que j'ai obtenu avec la requête mélant les deux champs:
Seulement, maintenant je n'arrive pas à lister de résultat, ni même à savoir si il y a des résultats...
Compliqué tout ça...
Voici ce que j'ai obtenu avec la requête mélant les deux champs:
Seulement, maintenant je n'arrive pas à lister de résultat, ni même à savoir si il y a des résultats...
Compliqué tout ça...
Nombre de résultats :
SELECT COUNT(*) FROM ta_table WHERE MATCH (title, body) AGAINST ('".$SearchText."');
Lister les résultats par pertinence :
SELECT champ1, champ2, champ3, MATCH (title, body) AGAINST ('".$SearchText."') AS score FROM ta_table WHERE MATCH (title,body) AGAINST ('".$SearchText."') LIMIT ".$offset.",".$row_count.";
Essaye un truc comme ça.
SELECT COUNT(*) FROM ta_table WHERE MATCH (title, body) AGAINST ('".$SearchText."');
Lister les résultats par pertinence :
SELECT champ1, champ2, champ3, MATCH (title, body) AGAINST ('".$SearchText."') AS score FROM ta_table WHERE MATCH (title,body) AGAINST ('".$SearchText."') LIMIT ".$offset.",".$row_count.";
Essaye un truc comme ça.
voilivoilou
Voila, ben en fait, FULLTEXT marche uniquement pour de longs paragraphes de texte, pas pour des titres, donc ça ne marchait pas parce ce que je visais aussi le titre pour le recherche et donc c'était pas bon...
En visant uniquement le contenu ça marche impec... sauf en ce qui concerne le comptage, il me met qu'il trouve 2 résultats alors que y en a 4 par exemple... je sais pas encore d'où ça vient...
Donc je vais adapter le script pour mon forum maintenant, pour voir, et ensuite, le problème va être le suivant: comment faire pour n'afficher qu'une partie du texte et non tout le paragraphe, avec le mot pertinent mis en valeur... comm sur google par exemple...
Y a t-il une solution simple?
Merci
En visant uniquement le contenu ça marche impec... sauf en ce qui concerne le comptage, il me met qu'il trouve 2 résultats alors que y en a 4 par exemple... je sais pas encore d'où ça vient...
Donc je vais adapter le script pour mon forum maintenant, pour voir, et ensuite, le problème va être le suivant: comment faire pour n'afficher qu'une partie du texte et non tout le paragraphe, avec le mot pertinent mis en valeur... comm sur google par exemple...
Y a t-il une solution simple?
Merci
FULLTEXT marche aussi pour les titres. Le seul truc, c'est que par défaut, il ne cherche pas dans les mots de moins de 3 caractères. Tu dois avoir tes problèmes dans tes requêtes, toi...
Sinon : http://fr3.php.net/substr pour afficher une portion de texte
Sinon : http://fr3.php.net/substr pour afficher une portion de texte
Problèmes de requêtes?
blman a écrit:FULLTEXT marche aussi pour les titres. Le seul truc, c'est que par défaut, il ne cherche pas dans les mots de moins de 3 caractères. Tu dois avoir tes problèmes dans tes requêtes, toi...
Sinon : http://fr3.php.net/substr pour afficher une portion de texte
Problèmes dans mes requêtes? Oui, sans doute... je commence à peine à optimiser mes requêtes... Voici le script que je suis en train de développer...
- Code: Tout sélectionner
<?php
if(!empty($_POST['source']))
{
$recherche=$_POST['source'];
$requete = (" SELECT COUNT(id_message) FROM messages AS nombre
WHERE MATCH(message) AGAINST('$recherche') " ) OR die(mysql_error());
$resultat=mysql_query($requete,$connect) OR die(mysql_error());
$data=mysql_fetch_array($resultat);
$nombre=$data[0];
if($nombre==0)
{
echo'<p>Aucun résultat trouvé</p>';
}
if($nombre>>0)
{
if($nombre==1)
{
echo'<p>Nous avons trouvé 1 résultat</p>';
}
else
{
echo'<p>Nous avons trouvé '.$nombre.' résultats</p>';
}
$requete = (" SELECT *, MATCH(message) AGAINST('$recherche') AS score
FROM messages
WHERE MATCH(message) AGAINST('$recherche') ORDER BY score DESC ") OR die(mysql_error());
$resultat=mysql_query($requete,$connect) OR die(mysql_error());
while($donnees = mysql_fetch_array($resultat))
{
$titre=Affiche($donnees['titre']);
$message=Affiche($donnees['message']);
echo '<p>Titre: '.$titre.'<br />
Contenu: '.$message.'</p><hr />';
}
}
echo'<h1>Recherche en cours</h1>';
echo'<form action="moteur.php" method="post" />
<input type="text" name="source">
<input type="submit" value="Chercher">
</form>';
}
else
{
echo'<h1>Pas de recherche en cours</h1>';
echo'<form action="moteur.php" method="post" >
<input type="text" name="source">
<input type="submit" value="Chercher">
</form>';
}
?>
Je vais regarder le lien que tu m'indiques, merci
SELECT COUNT(id_message) FROM messages AS nombre WHERE MATCH(message) AGAINST('$recherche')
Y'a déjà un problème là. Le "AS nombre", je vois pas trop bien ce qu'il fait là :
SELECT COUNT(*) FROM messages WHERE MATCH (title, message) AGAINST ('".$recherche."');
SELECT *, MATCH(message) AGAINST('$recherche') AS score FROM messages WHERE MATCH(message) AGAINST('$recherche') ORDER BY score DESC
Le ORDER BY score n'est pas utile (je crois pas).
SELECT *, MATCH(title, message) AGAINST("'.$recherche.'") AS score FROM messages WHERE MATCH(title, message) AGAINST("'.$recherche.'")
Utilisise aussi les LIMIT dans tes requêtes sinon, tu risque d'avoir de sérieux problèmes de ressources si il y a trop de résultats. Il faudrait limiter l'affichage à 30 résultats par page par exemple.
thierry8 a écrit:est-ce que ce système est suffisant pour faire une recherche ou faut-il encore implémenter quelque chose autour ?
il classe les résultats automatiquement par pertinence je suppose ?
Bien sûr, la recherche MySQL classe les résultats par pertinence. Mais on est vraiment loin d'un "vrai" moteur de recherche. L'utilisation des index FULLTEXT reste néanmoins une solution convenable pour le plupart des sites qui ne sont pas trop exigents car elle donne des résultats "convenables", ne prend pas trop de ressources et est assez facile à implémenter.
Par contre, pour des moteurs de recherches plus poussés, elle est très loin d'être suffisante : par défaut, les mots de moins de 3 caractères ne sont pas pris en compte, elle ne gère pas le problème du singulier/pluriel, elle ne gère pas les fautes d'orthographe, elle ne gère pas les synonymes, ...
Encore une fois, tout dépend du niveau de performance que l'on veut atteindre. Un bon moteur de recherche est un atout stratégique dans la réussite d'un site web. On estime d'ailleurs à 50%, la proportion des internautes qui utilisent les moteurs de recherche interne, c'est dire l'importance qu'on doit attribuer à cette fonctionnalité.
ok merci de toutes ces informations blman.
mieux vaut donc proposer au moins un système donc..
les deux encore mieux!
n'existe t-il pas des scripts "réputé", qui justement ont améliorer, autour de cette méthode mysql, la recherche (singulier/pluriels, etc..)
mieux vaut donc proposer au moins un système donc..
les deux encore mieux!
n'existe t-il pas des scripts "réputé", qui justement ont améliorer, autour de cette méthode mysql, la recherche (singulier/pluriels, etc..)
12 messages • Page 1 sur 1
Formation recommandée sur ce thème :
Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.
Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.
Lectures recommandées sur ce thème :
- URL canonique : plugins pour Wordpress, Drupal, Joomla et Magento
- Formation au référencement Internet plébiscitée : Ranking Metrics
- Se former au référencement : séminaire Ranking Metrics à Lyon les 17-18 Juin
- Cours de référencement Google par les spécialistes de Ranking Metrics
- Séminaire de formation au référencement à Marseille
- Suite de l'article sur le fichier .htaccess : l'URL rewriting
- Référencement à Marseille : stage de formation Ranking Metrics
- Formation référencement de blogs, netlinking, sites dynamiques - à Toulouse
- SearchMonkey : Yahoo ouvre sa plateforme de recherche
- Formation au référencement Google : les nouveautés de 2008
- recherche module blog
- Installation Module recherche possible ?
- Module de recherche DNS
- Module de recherche Google
- module de recherche google (New Beta)
- Comment supprimer le module de recherche Adsense
- Recherche forum sans module d'authentification
- Module de recherche pour les utilisateurs de Safari
- Recherche un module simple de gestion / envoi de e-card
- oscommerce - module de recherche qui marche pas
- Petit module google maps (recherche de joueurs jdr)
- mise en place résultat recherche Adsense
- Mise en place de Swish-e moteur d'indexation et de recherche
- Mise en place moteur de recherche sur une partie annonce
- Module et réferencement
Consultez la description détaillée des produits ou services de Google suivants : Google Browser Sync
- Logiciel de référencement AgentWebRanking
AgentWebRanking est un logiciel professionnel qui permet d'analyser le positionnement d'un ou plusieurs sites dans plus de 300 moteurs de recherche dans le monde. Vous pouvez ainsi analyser les performances du référencement pour de nombreux mots-clés. - Transformer des citations en liens
Cet outil vous permet de trouver des pages citant votre site mais ne faisant pas (encore) de lien. Il suffira parfois d'un simple mail pour transformer cette simple citation en lien (backlink).
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités

le forum