Moteur de recherche en Full Text
Posté : 29 août 2007, 17:00
J'ai un moteur de recherche interne sur un site qui ne fonctionne pas super...
Je récupère les mots de la requête, ensuite je fais un "petit" traitement :
Pour obtenir :
Mon problème est : comment gérer la requête "deux mots" (entre guillemets, pour rechercher l'expression exacte) et celle avec un apostrophe (comme "d'amour'' par exemple), en restant "secure" ?
Pour le moment, j'obtiens :
et
A cause de la fonction mysql_real_escape_string (qui protège les caractères spéciaux d'une commande SQL), je ne trouve pas tous les résultats souhaités. Si je recherche "d'amour", je ne trouverai rien puisque "d'amour" devient "d\'amour".
Un second problème est quand je recherche "amour" seul : je ne trouverai pas "d'amour" ! Mais cela doit être lié au fait que mysql ne distingue pas le "d' " de "amour" !?
En quelque sorte, mon problème est de savoir comment bien utiliser les opérateurs pour une recherche booléenne dans MySQL...
Je récupère les mots de la requête, ensuite je fais un "petit" traitement :
Code : Tout sélectionner
$search = explode(" ", mysql_real_escape_string($search));
$recherche = "";
foreach($search as $value) {
$recherche .= "+".$value."* ";
}Code : Tout sélectionner
MATCH(titre,description,reference) AGAINST ('+deux* +mots* ' IN BOOLEAN MODE)Pour le moment, j'obtiens :
Code : Tout sélectionner
MATCH(titre,description,reference) AGAINST ('+\"deux* +mots\"* ' IN BOOLEAN MODE)Code : Tout sélectionner
MATCH(titre,description,reference) AGAINST ('+d\'amour* ' IN BOOLEAN MODE)Un second problème est quand je recherche "amour" seul : je ne trouverai pas "d'amour" ! Mais cela doit être lié au fait que mysql ne distingue pas le "d' " de "amour" !?
En quelque sorte, mon problème est de savoir comment bien utiliser les opérateurs pour une recherche booléenne dans MySQL...