8791 sujets

Développement web côté serveur, CMS

Bonjour,

Voila j'ai ce code pour mon moteur de recherche:
if(trim(preg_replace("/[\s,]+/", '', $text_search)) != '') {

	$keywords = preg_split("/[\s,]+/", $text_search);

	$keywords = array_unique($keywords);

	$search .= ' AND (';

	$prefix = '';

	for($i = 0; $i < count($keywords); $i++) {

		$search .= $prefix."a.ad_headline LIKE '%".$keywords[$i]."%' ";

		$prefix = 'OR ';

	}
	
	for($i = 0; $i < count($keywords); $i++) {

		$search .= $prefix."a.ad_text LIKE '%".$keywords[$i]."%' ";

		$prefix = 'OR ';

	}

	$search .= ') AND a.published = 1';

} else {

	$search .= ' AND a.published = 1';

}


Je voulais ensuite que mon moteur fasse une recherche en FULLTEXT, j'ai donc créé des index FULLTEXT sur mes deux colonnes ad_text et ad_headline.
J'ai ensuite exécute cette requête sql:
SELECT * FROM jos_adsmanager_ads WHERE MATCH (ad_headline,ad_text) AGAINST ('mysql');


Mon problème, c'est que ça ne change rien. En effet, prenons deux annonces A et B
A--> ad_headline: Une pomme verte
ad_text: Une pomme verte avec une tache.

B--> ad_headline: Une poire rouge
ad_text: Une poire rouge avec une tache.

Si je fais ma recherche sur "pomme tache", il va me retourner l'annonce A puis la B (bon on pourrait se dire que ça marche)
Si je fais une recherche sur "poire tache", il va me retourner la même chose. D'abord l'annonce A et ensuite la B. Or, la pertinence dans ce cas là est plus importante pour B puisque j'ai les deux mots.
Je pensais qu'avec l'indexation en fulltext, le moteur de recherche allait me retourner les réponses plus pertinentes en premier.

Avez vous une idée de ce qu'il se passe? Est-ce que j'ai oublié quelque chose?

Merci d'avance