⚙️ Comment un résultat est-il classé ?
Lorsqu’un utilisateur lance une recherche, chaque contenu (article, pièce jointe, commentaire…) reçoit un score de pertinence. Ce score détermine sa position dans les résultats.
Le score global d’un document est calculé comme la somme des scores de chaque champ analysé.
Chaque champ reçoit un score individuel basé sur la formule suivante :
score_champ = Boost × IDF × TF
Boost : une pondération manuelle donnée au champ (par exemple,
title^2.0
)IDF (Inverse Document Frequency) : plus un mot est rare dans la base, plus il a d’impact
TF (Term Frequency) : plus un mot est fréquent dans le champ du document, plus ce champ est jugé pertinent
👉🏻 Le score final du document est ensuite obtenu en additionnant les scores de chaque champ.
🧪 Exemple
Prenons la requête "remboursement carte"
.
Imaginons un document avec les occurrences suivantes :
Champ | Contenu | Boost | Occurrences |
Titre | “Procédure de remboursement par carte” | 1.6 | 1 mot clé |
Commentaire | “Le remboursement carte peut être refusé” | 0.8 | 2 mots clés |
Le moteur va calculer :
score_titre = 1.6 × IDF × TF
score_commentaire = 0.8 × IDF × TF
Puis : score_total = score_titre + score_commentaire
Cela permet de cumuler les contributions de plusieurs champs pour évaluer la pertinence globale d’un document.
💡 Conséquence : Un document qui contient les mots-clés à plusieurs endroits peut être mieux classé qu’un autre qui ne les contient qu’à un seul endroit, même si cet emplacement a un fort coefficient de pondération.
🧩 Quels champs sont analysés ?
Lors d’une recherche, nous analysons plusieurs champs du contenu :
(titre, étiquettes, commentaires, pièces jointes, attributs, etc.)
Chacun de ces champs peut avoir une importance différente dans le calcul de pertinence, par exemple :
Champ | Pondération |
Titre ( | 1.6 |
Titre exact ( | 2.0 |
Étiquettes ( | 1.4 |
Commentaires | 0.8 |
Pièces jointes | 1.0 |
→ Les versions unstemmed correspondent à une recherche exacte, sans simplification grammaticale. Elles ont souvent une pondération plus élevée.
⏳ La fraîcheur du contenu est-elle prise en compte ?
Oui. Elium applique également un ajustement temporel des scores pour privilégier les contenus mis à jour récemment, sans pour autant exclure les ressources plus anciennes.
Cela fonctionne via une fonction de décadence, qui réduit légèrement le score de pertinence des documents en fonction de leur date de dernière mise à jour :
Les contenus mis à jour au cours des 30 derniers jours conservent la totalité de leur score.
Au-delà, le score commence à décroître progressivement, pour atteindre 33 % de sa valeur initiale après 1 an.
Les documents plus anciens peuvent toujours apparaître s’ils sont très pertinents, mais les contenus récents sont généralement favorisés.
Cela permet de garantir que les utilisateurs accèdent en priorité à des informations à jour, tout en conservant la valeur des connaissances durables.
🌐 Et pour les langues ?
Si votre plateforme est multilingue, la recherche s’adapte à la langue de votre interface. Elle utilise les champs traduits correspondants (titre, tags, pages wiki, etc.) avec des pondérations également adaptées.
🔄 Comment les mots-clés sont-ils interprétés ?
Nous utilisons une requête de type query_string
qui comprend :
Une recherche sur plusieurs champs en même temps (avec les pondérations vues ci-dessus)
L’opérateur AND par défaut : tous les mots doivent être présents pour qu’un document corresponde
🧠 À savoir : certains mots sont automatiquement ignorés
Pour améliorer la pertinence générale, Elasticsearch utilise ce qu’on appelle des "stop words" : ce sont des mots très courants dans la langue (comme “le”, “et”, “dans”, “on”, “doit”, etc.) qui sont automatiquement supprimés de la requête.
Cela peut poser problème dans certains cas où un mot courant est aussi un terme métier important. Par exemple :
Si vous cherchez simplement le mot “on” (nom d’une procédure ou acronyme), il pourrait être ignoré.
Le moteur interprète alors une requête comme si elle était vide ou incomplète.
Note : Il n'y a pas de façon de forcer la prise en compte d'un stop words, même en le plaçant entre guillemets.
🤔 Pourquoi un document ne ressort-il pas ?
Quelques raisons possibles :
Le mot n’apparaît pas dans un champ pris en compte
Le mot est trop fréquent (IDF faible)
Le champ où il apparaît a une pondération faible
Le mot est ignoré car considéré comme un stop word
Le document est mal structuré (titre générique, peu de mots clés)
✅ Bonnes pratiques pour optimiser la recherche
Donnez des titres explicites et pertinents aux contenus
Ajoutez des étiquettes (tags) descriptives
Utilisez les blocs de texte principaux plutôt que les commentaires pour l'information importante
Ajoutez une version traduite des titres ou tags si vous avez des utilisateurs multilingues
Évitez les titres trop génériques ou faits uniquement de mots très courants