Problème de recherche sur un index fulltext

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 : Problème de recherche sur un index fulltext

par céka » 05 janv. 2006, 21:11

Merci à vous deux.

Effectivement, en faisant ma recherche sur le mot "Produit3", je le trouve bien.

par mario » 05 janv. 2006, 19:55

Un mot trop court est ignoré. La taille minimale pour un mot dans les recherches est de 4 lettres.

source: http://dev.mysql.com/doc/refman/5.0/fr/ ... earch.html

ps: la taille minimale est modifiable dans le fichier my.ini

par céka » 05 janv. 2006, 15:10

Ca aurait pu etre ca, car je ne connaissais pas cette règle.
Mais je viens d'essayer avec '4', qui ne se se trouve que dans une seule rangée, et il ne me l'a pas trouvée.

Code : Tout sélectionner

SELECT * FROM produit WHERE MATCH(nom_produit,lib_produit) AGAINST ('4')

par ouckileou » 05 janv. 2006, 15:03

Salut,

je pencherais pour la règle des 50% ;)
Si tu cherches une expression qui se trouve dans plus de la moitié des lignes, elle ne sera pas considérée comme significative et donc aucune ligne ne sera renvoyée.
Et vu que tes lignes se ressemblent beaucoup...
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

Problème de recherche sur un index fulltext

par céka » 05 janv. 2006, 15:00

Bonjour,

Lorsque je fais une recherche avec match/against, l'instruction ne me ramène aucune donnée.

Code : Tout sélectionner

SELECT * FROM produit WHERE MATCH(nom_produit,lib_produit) AGAINST ('')
J'ai 6 rangées dans ma table "produit".
id_produit id_categ nom_produit lib_produit
1 1 Produit 1 Ceci est le libellé du produit numéro 1
3 1 Produit2 Ceci est le libellé du produit numéro 2
4 2 Produit2_1
5 1 Produit3 Ceci est le libellé du produit numéro 3
6 1 Produit 4 Ceci est le libellé du produit numéro 4
Quelle que soit la chaine de caractère que je renseigne dans mon against, je ne récupère rien.
"MySQL n'a retourné aucun enregistrement. (traitement: 0.0003 sec.)"
Voici le résultat du explain: l'index fulltext est bien utilisé.
1 SIMPLE produit fulltext nom_produit_2 nom_produit_2 0 1 Using where
Quelqu'un aurait-il une idée ?