Bonjour à tous, je boss actuellement sur mon moteur de recherche qui compte déjà pas mal d'option et basé sur un système LIKE / REGEXP et non FULLTEXT :-°
Donc voilà pour l'instant j'ai ajouté pas mal d'options et je me vois mal les convertir pour être compatible avec le FULLTEXT surtout que je n'en ai pas bien compris le fonctionnement et que complètement changer la structure de mon code ne m'intéresse pas trop :D
Donc je voulais ajouter un système de ORDER BY par pertinence des résultats, n'étant pas très balèze en SQL j'ai trouvé une méthode vraiment pas mal qui fonctionne mais que j'aimerais améliorer :
J'ai remplacé toutes les variables pour obtenir le code comme il pourrait apparaître dans mysql_query(), si sa peut vous aider à comprendre mon code la recherche est faite avec "motclé1 motclé2 motclé3" en mode "au moins un mot", sur toutes les parties du site et dans les pages entière. J'ai mis aussi des retour à la ligne pour éclaicir un peu tout ça ;)Code:
1
2
3
4
5
6
7
8
9
10
11 SELECT *, ((CASE WHEN CONCAT(`titre`," ",`desc`," ",`intro`," ",`page`) LIKE '%motclé1%' THEN 3 ELSE 0 END) + (CASE WHEN CONCAT(`titre`," ",`desc`," ",`intro`," ",`page`) LIKE '%motclé2%' THEN 3 ELSE 0 END) + (CASE WHEN CONCAT(`titre`," ",`desc`," ",`intro`," ",`page`) LIKE '%motclé3%' THEN 3 ELSE 0 END)) AS `pertinence` FROM `sujets` WHERE ( CONCAT(`titre`," ",`desc`," ",`intro`," ",`page`) LIKE '%motclé1%' OR CONCAT(`titre`," ",`desc`," ",`intro`," ",`page`) LIKE '%motclé2%' OR CONCAT(`titre`," ",`desc`," ",`intro`," ",`page`) LIKE '%motclé3%') AND `ref` REGEXP '^[1234]' ORDER BY `pertinence` DESC
Ça marche relativement bien : ça permet d'afficher en priorité les pages contenant le plus de mots clés et d'attribuer plus de valeur à certains mots clefs mais ne permet pas de savoir si un mot clef apparaît plusieurs fois dans une même page ce qui est problématique pour les recherches "tous les mots" ou "expression exacte"....
J'aimerais donc que au lieu de trouver si un mot est présent dans une page, qu'il trouve le nombre de fois qu'il apparaît... et je pense que la structure case ne le permettrait pas (au peut être en imbriqué) donc je fais appelle à votre connaissance en SQL pour peut-être m'aider... ^^
Merci à tous.
Zwify.
PS : j'utilise MySQL