[spip-dev] Modification au pointage des résultats de recherche...

J’ai apporté une modification au fichier recherche_to_array.php pour améliorer la pertinence des résultats de recherche pour un site et je me suis dis que cela pourrais être pertinent pour le moteur de recherche de spip en général…

Je ne suis pas sur que ce soit le code le plus optimal ou que l’ajustement apporté au scores soit tout-a-fait adéquat, mais si ça peut donner des idées a du monde plus qualifié, tant mieux ! :wink:

Le code original :

foreach ($champs as $champ => $poids) {
$champ = explode(’.’,$champ);
$champ = end($champ);
// translitteration_rapide uniquement si on est deja en utf-8
$value = ($GLOBALS[‘meta’][‘charset’]==‘utf-8’ ? translitteration_rapide($t[$champ]) : translitteration($t[$champ]));
if ($n =
($options[‘score’] || $options[‘matches’])
? preg_match_all($preg, $value, $regs, PREG_SET_ORDER)
: preg_match($preg, $value)
) {
$vu = true;

if ($options[‘champs’])
$champs_vus[$champ] = $t[$champ];
if ($options[‘score’])
$score += $n * $poids;
if ($options[‘matches’])
$matches[$champ] = $regs;

if (!$options[‘champs’]
AND !$options[‘score’]
AND !$options[‘matches’])
break;
}
}

Que j’ai remplacé par :

foreach ($champs as $champ => $poids) {
$champ = explode(’.’,$champ);
$champ = end($champ);
// translitteration_rapide uniquement si on est deja en utf-8
$value = ($GLOBALS[‘meta’][‘charset’]==‘utf-8’ ? translitteration_rapide($t[$champ]) : translitteration($t[$champ]));

if ($n =
($options[‘score’] || $options[‘matches’])
? preg_match_all($preg, $value, $regs, PREG_SET_ORDER)
: preg_match($preg, $value)
) {
$vu = true;

if ($options[‘champs’])
$champs_vus[$champ] = $t[$champ];
if ($options[‘score’]) {

// ICI, je vérifié au niveau du retour donné par pref_match_all si la chaine qui a été trouvé est une chaine de plusieurs mot… Si oui, alors au niveau du score, on augmente son score puisque cela signifie que la chaine complète a été trouvé… Et ça ne bloque pas la recherche sur les mots séparé…

$recherche_mots = explode(’ ', $regs[0][0]);
if (count($recherche_mots) > 1) {
$score += $n * $poids * 3;
} else {

// ICI, si on a un seul mot au niveau de la recherche et que ce mot est trouvé comme mot entier et non pas comme faisant parti d’un autre mot, il est pertinent d’augmenter le score la aussi selon moi !

$new_preg = ‘/\b(’.$regs[0][0].’)\b/UimsSu’;
$string_entiere = preg_match($new_preg,$value);

if ($string_entiere > 0) {
$score += $n * $poids * 3;
} else {
$score += $n * $poids;
}

}
}

J'aime bien l'idée d'accentuer la pondération lorsque tous les mots sont trouvés effectivement.

Pour l'autre partie, ie sur un mot complet , je n'ai pas d'avis.

MM.

Salut et merci pour ta proposition :slight_smile:

Salut et merci pour ta proposition :slight_smile:

J’ai apporté une modification au fichier recherche_to_array.php pour améliorer la pertinence des résultats de recherche pour un site et je me suis dis que cela pourrais être pertinent pour le moteur de recherche de spip en général…

Je ne suis pas sur que ce soit le code le plus optimal ou que l’ajustement apporté au scores soit tout-a-fait adéquat, mais si ça peut donner des idées a du monde plus qualifié, tant mieux ! :wink:

Hésite pas à créer un ticket sur https://core.spip.net/projects/spip/issues en y attachant le patch en question.

Je viens de faire une demande d’ouverture de compte sur core.spip.net … En attente d’être validé ! :slight_smile: