Recherche : trier les résultats par pertinence (titre exact → texte exact → approximatif) #51
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Contexte
Actuellement, la recherche (
SearchEngine.php) classe les résultats par un score pondéré unique (titre × 6, catégorie × 3, contenu × 1). Un résultat avec une correspondance floue dans le titre peut ainsi devancer un résultat avec les mots exacts dans le corps du texte.Exemple visible sur /search?q=home+assistant.
Comportement souhaité
Trier les résultats en trois niveaux prioritaires, dans cet ordre :
À l'intérieur de chaque niveau, le tri secondaire reste le score actuel (décroissant).
Implémentation suggérée
Dans
SearchEngine::search(), calculer un rang de niveau (0,1,2) en plus du score, puis trier d'abord sur ce rang, puis sur le score :La méthode
tokenScore()renvoie déjà1.0pour une correspondance exacte — il suffit de vérifier que tous les tokens obtiennent1.0sur le champ titre (resp. contenu) pour classer l'article dans le bon niveau.Fichiers concernés
src/SearchEngine.php— logique de scoring et de tri