Algorithme de recherche
Comment fonctionne la recherche dans Elium ?
Mis à jour le 1 juillet 2025
⚙️ 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.
🧩 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 (title) | 1.6 |
Titre exact (title.unstemmed) | 2.0 |
Étiquettes (tags.name) | 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