Introduction
-
Définition
Le score dans Elasticsearch est une des notions les plus importantes et qui va définir le classement des résultats de recherche. A chaque fois que vous faites une recherche dans Elasticsearch, un score est calculé pour chaque document qui correspond à vos critères de recherche. Plus la valeur de ce dernier est élevée, plus le document sera considéré comme pertinent. Il est représenté pour chaque document par la métadonnée "_score".
-
Les composantes
Plusieurs éléments sont pris en compte pour calculer le score. On peut citer :
1. Fréquence des termes (TF) : Le nombre de fois qu’un terme apparaît dans un document. Une fréquence plus élevée indique une relation plus forte entre le terme et le document.
2. Fréquence inverse des documents (IDF) : mesure l’importance d’un terme dans tous les documents de l’index. Un terme qui apparaît dans moins de documents aura une IDF plus élevée, ce qui signifie son importance.
3. Longueur de champ : La longueur du champ dans lequel le terme apparaît. Les champs plus courts avec des termes correspondants sont considérés comme plus pertinents, car le terme occupe une plus grande partie du champ.
4. Boost : vous permet d’attribuer un facteur de boost à des champs ou des termes spécifiques lors de l’exécution de la requête. Cela peut être utile pour souligner l’importance de certains champs ou termes dans les résultats de recherche.
Les algorithmes prédéfinies
Comme tout produit, Elasticsearch évolue énormément pour prendre en compte de nouvelles fonctions, corriger des bugs... Au niveau gestion du score c'est aussi le cas. Elasticsearch supporte plusieurs algorithmes pour calculer le score et vous permet même de les personnaliser. Vous pouvez aller plus loin et faire votre propre algorithme si vous êtes dans un cas très très spécifique. Mais comme toujours, commencez d'abord par éprouver et personnaliser les algorithmes existants avant de créer les vôtres.
-
TD-IDF [deprecated]
Il s'agit de l'algorithme qui a longtemps été utilisé par défaut dans Elasticsearch jusqu'à la version 7.
-
BM25
Aussi connu sous le nom Okapi BM25 il s'agit de l'algorithme qui est désormais utilisé par défaut dans Elasticsearch. Ce dernier est une évolution de TD-IDF et accepte les paramètres de personnalisation suivants lors de la définition de la similarity :
1. k1 : Contrôle la normalisation de fréquence des termes non linéaires (saturation). Sa valeur par défaut est 1.2
2. b : Contrôle dans quelle mesure la longueur du document normalise les valeurs tf. Sa valeur par défaut est 0.75
2. discount_overlaps : Détermine si les jetons de chevauchement (jetons avec incrément de position 0) sont ignorés lors du calcul de la norme. Par défaut, cette option est vraie, ce qui signifie que les jetons de chevauchement ne sont pas pris en compte lors du calcul des normes.
Personnaliser votre score
-
boost : A l'indexation [deprecated]
Il est possible de passer un paramètre boost dans votre document. Mais depuis la version 5.0 il est déconseillé de le faire car assez souvent il vous faudra réindexer tous vos documents en cas de changement. PUT my-index-000001
{
"mappings": {
"properties": {
"title": {
"type": "text",
"boost": 2
},
"content": {
"type": "text"
}
}
}
}
-
boost : A la recherche
Il est possible de passer un paramètre boost dans votre requête de recherche. Ajouter une requete https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-boosting-query.html
-
A la recherche : constant_score
https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-constant-score-query.html
-
A la recherche : fonciton de score
https://www.elastic.co/guide/en/elasticsearch/reference/8.13/index-modules-similarity.html https://opster.com/guides/elasticsearch/search-apis/elasticsearch-score/
Date de publication: 2024-05-03T20:40:00+08:00
Date de modification: 2024-08-11T13:21:39
Auteur:
- Martin LEKPA : SRE / DevOps