Recherche fulltext

Eléphant du PHP | 130 Messages

27 août 2006, 13:54

Bonjour,

Voilà je suis entrain de mettre au point une requête SQL pour une recherche FULLTEXT mais celle-ci ne me renvoi aucun résultat, je la test directement sur la BDD, apparemment la syntaxe est bonne mais rien :(

SELECT titre, description, auteur, script, url_site, size_page,
MATCH (
titre, description, auteur, script, url_site
)
AGAINST (
'php javascript'
) AS score
FROM stik_result
WHERE MATCH (
titre, description, auteur, script, url_site
)
AGAINST (
'php javascript'
)
AND valide = '1'
LIMIT 0 , 10
Je sais que des mots de moins de 4 caractères sont ignorés comme 'php' mais il devrait me sortir les résultat de 'javascript' ?

Qu'en pensez-vous ?

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

27 août 2006, 14:16

Tu n'as probablement pas assez d'enregistrements dans ta base. Si tu en as moins d'une dizaine alors tu auras beaucoup de mal à obtenir des résultats, ajoute de nouvelles entrées si c'est le cas.

Eléphant du PHP | 332 Messages

30 août 2006, 22:47


logik
Invité n'ayant pas de compte PHPfrance

31 août 2006, 10:57

Le BOLEAN MODE est sympa dans le sens ou l'on peut utiliser les '+' et les '*', ect... mais j'ai aussi essayer avec ma requete du dessus mais les résultats sotant ne sont plus pertinents et ne sont plus classer par score ! Par contre Hubert Roksor, tu avias raison ! Je n'avais pas assez d'enregistrements dans ma BDD :)

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

31 août 2006, 13:37

Petite explication peut-être de la remarque d'Hubert Roksor :
mysql> SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('MySQL');
Empty set (0.00 sec)

La recherche du mot MySQL ne donne aucun résultat dans l'exemple précédent, car il est présent dans plus de la moitié des lignes. Ainsi, il est considéré comme un mot à ignorer (un mot avec une valeur sémantique nulle). C'est le comportement le plus optimal : un langage de requêtes ne doit pas retourner chaque ligne d'une table de 1 Go.

Un mot qui est trouvé dans la moitié des enregistrements d'une table n'est pas efficace pour trouver les document appropriés. En fait, il trouvera sûrement beaucoup de documents inappropriés à la recherche. On sait tous que cela arrive souvent lorsqu'on recherche quelque chose sur internet en utilisant un moteur de recherche. C'est en suivant ce raisonnement que ces lignes se sont vues attribuer une valeur sémantique très basse dans ce cas particulier.

Le seuil de 50% a un impact significatif lorsque vous commencez à comprendre comment fonctionne l'index : si vous créez une table et insérez une ou deux lignes, chaque mot apparaîtra dans 50% des lignes. Résultat, la recherche ne trouvera rien. Assurez-vous d'insérer au moins trois lignes, et même plus.
http://dev.mysql.com/doc/refman/5.0/fr/ ... earch.html

Autrement, tu peux modifier la liste des mots à ignorer, voir ici :
http://dev.mysql.com/doc/refman/5.0/fr/ ... uning.html

Enfin, il faudra penser à marquer le sujet "Résolu" la prochaine fois :)