Recherches en FULLTEXT ?

WRInaute passionné
Bonjour,

J'essaye d'effectuer des recherches en FULLTEXT pour la première fois alors soyez indulgent ^^.

Dans ma table nommé "MATABLE" j'ai entre autre 2 champs nommés "champ1" et "champ2" qui sont de type "text" qui contiennent du texte et sur les quelles les recherches doivent s'effectuer.

J'ai mis en place un index dont le nom de la clé est "recherche" de type "FULLTEXT" avec comme nom des champs (champ1 et champ2).

J'effectue la requête suivante :
Code:
$query = mysql_query("SELECT * FROM MATABLE 
WHERE toto LIKE '".$_GET['cp']."%' 
AND MATCH (champ1, champ2) AGAINST ('".$_GET['key']."') 
ORDER BY ".$trie."");

"MATABLE" contient 5 enregistrements dont l'un contient une fois le mot "occasion" et l'autre une fois le mot "renault" et uniquement dans le titre. Le résultat de ma requête me sort uniquement l'enregistrement correspondant au mot "renault" au lieu de me sortir 2 résultats.

Est ce normal ou ais-je merdé quelque part ??

Merci
 
WRInaute passionné
forty a dit:
ca dépend du contenu de $_GET['key']

En l'occurrence dans ma "démo", $_GET['key'] correspond à la recherche sur "occasion renault" .

Ceci dit, je pense avoir trouvé pourquoi...Visiblement, il faut que chaque mot clé soit séparé par une virgule (signifiant : ou), que chaque mot soit entouré de guillemet et que chaque mot sur le quelle la recherche s'effectue soit précédé du signe + (+ : recherche les lignes qui contiennent le mot.)

Ce qui revient :
Code:
...AGAINST ("+mot1","+mot2")

J'ai bon là ?

Tant que j'y suis :
Une recherche FULLTEXT doit contenir au minimum 4 lettres ?
Toujours en FULLTEXT, pourquoi un mot précédé d'une simple quote (apostrophe) n'est pas trouvé ?

Exemple sur le terme "voiture d'occasion" :
d'occasion -> trouvé
occasion -> non trouvé
 
WRInaute passionné
Si tu recherches "occasion renault" tu devrais trouver tous les enregistrements contenant l'un ou l'autre des mots.

"occasion" et "d'occasion" c'est pareil normalement.

il y a en effet des mots trop court ignorés.
 
WRInaute occasionnel
Hello,

pour le nombre mini de caractères, c'est une variable mysql à configurer dans my.ini ou my.cnf "str_min_word", qui est configurée à 3 par défaut. Ce qui fait que les mots de trois lettres ou moins sont ignorés. Il y a également une liste de mots communs ignorés qui peut être personnalisée (à condition d'avoir un dédié pour les 2)

Sinon, il est tout à fait possible d'utiliser les + pour chaque mot pour les rechercher tous. Mais aussi utiliser les - pour exclure. Tu peux également utiliser * pour rechercher une chaine comprise entre une chaine et une autre. Il y a également possibilité de rechercher une chaine exacte avec des guillemets, ou même de mettre des priorités à certains mots par rapport à d'autres dans la requête.
 
WRInaute passionné
Salut Aaarrrgggh ,

Oui, j'ai un peut survolé la doc MYSQL et on ne peut pas dire que ce soit super simple ^^. Sinon, pour le nombre de caractères, je suis nic*é ... je suis sur un mutualisé :? .

Merci pour les infos :wink:
 
Discussions similaires
Haut