info sur requete mysql MATCH () AGAINST()

Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics

de_prog
Nouveau WRInaute
 
Messages: 28
Inscription: Jeu Mai 24, 2007 16:01

info sur requete mysql MATCH () AGAINST()

Message le Ven Jan 18, 2008 9:27

Bonjour,

j'ai un gros problème avec une requete !!
j'ai un moteur de recherche sur une base d'infos (+ de 22 000 enregistrement).

Les requetes du genre where titre LIKE '$kekchose' or texte LIKE '$kekchose' étant très lente, j'ai opté pour le FULLTEXT.
j'ai mis mes champs titre et texte en FULLTEXT et transformé mes requetes en :

where MATCH (titre,texte) AGAINST('$kekchose') => résultat pas pertinent du tout !!!, me sors des résultats ou il n'y as pas $kekchoses et des fois des résultats ou il y a $kekchoses de façon aléatoire.

De même, j'ai en parcourant internet transformé ma reuqte en
where MATCH (titre,texte) AGAINST('$kekchose' IN BOOLEAN MODE) => pas mieux,bref mon moteur de recherche est plus rapide mais carrément pas pertinant du tout.

Quelqun peut t'il m'éclairer sur le sujet... ?

Merci d'avance pour votre aide.


finstreet
WRInaute accro
WRInaute accro
 
Messages: 10468
Inscription: Dim Juil 10, 2005 12:39

Message le Ven Jan 18, 2008 10:13

tu entends quoi par pertinent ?

(c'est pour faire avancer le pb)


totoro
WRInaute passionné
WRInaute passionné
 
Messages: 908
Inscription: Mer Juil 28, 2004 14:12

Message le Ven Jan 18, 2008 11:22

Salut,

Essaye avec qqch du genre :
Code: Tout sélectionner
SELECT ... FROM matable  WHERE MATCH (titre) AGAINST ('$kekchose')


Si tu peux éviter le mode booleen, evite le, ca va ralentir le moteur pour pas grand chose ...

Attention avec match against tu as des configurations à faire pour ne pas être piégé et avoir des retours pertinents (Fichier my.cnf):
- la longueur des expressions => ft_min_word_len
Cela permet de ne pas rechercher sur les mots de moins de 3 lettres par exemple
- certains mots sont rejetés, la liste se parametre avec la variable ft_stopword_file

La meilleur source d'info sur la question: http://dev.mysql.com/doc/refman/5.0/fr/ ... earch.html


webmasterlamogere
WRInaute accro
WRInaute accro
 
Messages: 1874
Inscription: Dim Déc 17, 2006 21:08

Message le Ven Jan 18, 2008 11:25

match retourne un nombre qui est d'autant plus grand que le résultat "match" :
Code: Tout sélectionner
where MATCH (titre,texte) AGAINST('$kekchose') > 10

Le 10 est a adapter à la hausse pour être plus précis.

de_prog
Nouveau WRInaute
 
Messages: 28
Inscription: Jeu Mai 24, 2007 16:01

Message le Lun Jan 21, 2008 12:10

Ok , merci pour vos réponses, je vais regarder tout ça et tester, je vous tiens au courant !!!

de_prog
Nouveau WRInaute
 
Messages: 28
Inscription: Jeu Mai 24, 2007 16:01

Message le Mar Jan 22, 2008 11:54

ça y'est, j'ai bien compris ce que tu m'as dit webmasterlamogere et du coup je peux mieux trier les résultats de mes requetes.

En revanche, les résultats ne sont toujours pas ce que j'attend ... :

MATCH est égale à 0 sur une requete ou je recherche un mot qui est bien dans le texte !!!!
ex : le mot "Millionnaire" , le titre de l'article : Millionnaire et seule, avec le loto...
la requete :

Code: Tout sélectionner
select  MATCH (titre) AGAINST (' Millionnaire '),texte,id,titre,date from articles WHERE  ( MATCH (titre) AGAINST (' Millionnaire ')) > 0 ORDER BY date DESC

sinon peut tu m'en dir plus totoro sur le fichier (Fichier my.cnf):

Bon, en tout cas merci pour votre aide, c'est déjà beaucoup mieux qu'au début :-) !

je continue...


webmasterlamogere
WRInaute accro
WRInaute accro
 
Messages: 1874
Inscription: Dim Déc 17, 2006 21:08

Message le Mar Jan 22, 2008 14:10

je te conseil de lire cette page : -http://dev.mysql.com/doc/refman/5.0/fr/fulltext-search.html

par exemple ce paragraphe :
Tous les mots corrects de la liste et de la requête sont pondérés en fonction de leur importance dans la liste ou la requête. De cette fa¸on, un mot présent dans de nombreuses lignes aura un poids faible (et peut être même un poids nul), car il a peu d'importance dans cette requête particulière. Au contraire, si le mot est rare, il recevra un poids fort. Le poids des mots sont alors rassemblés pour calculer la pertinence de la ligne...


totoro
WRInaute passionné
WRInaute passionné
 
Messages: 908
Inscription: Mer Juil 28, 2004 14:12

Message le Mar Jan 22, 2008 17:46

Peut etre comme ça :
Code: Tout sélectionner
select titre, texte, id, titre, date FROM articles WHERE  ( MATCH (titre) AGAINST (' Millionnaire ')) ORDER BY date DESC


Pour le my.cnf le lien que je t'ai filé http://dev.mysql.com/doc/refman/5.0/fr/ ... earch.html reste la référence pour se dépanner ... Tu n'en a pas forcément besoin, mais il faut juste savoir que des mots clés (par exemple "after" "afterwards" "again" "against", "certain" ...).


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 :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités