La propriété "boost" dans le mapping


(Christophe Boucaut) #1

Bonjour,

Il y a quelque temps, j'ai du trouver sur une doc qu'il était possible de passer au mapping, un "boost" avec une valeur numérique. Ainsi, j'ai ceci dans mon mapping (pour mon champs comment) :

"comment" : {
"type" : "string",
"boost" : 2.0,
"analyzer" : "french"
},

Cependant, impossible de retrouver une documentation sur internet. Je ne trouve que ceci mapping-boost-field qui ne semble pas correspondre à ce que j'applique et qui est déprécié. Est-ce un reliquats d'une ancienne version d'ES ?

Merci par avance.

EDIT: Après avoir testé sans, le score change ... donc j'en déduis qu'il est encore utilisé.


(Jérôme Mainaud) #2

Bonjour,

Si je lis bien le lien que tu nous donnes, l'utilisation d'une valeur de boost est obsolète et doit être remplacé par l'utilisation d'une fonction de score. La raison donnée à un tel changement est la suppression du support du boost dans Lucene en raison d'un fonctionnement défaillant dans certains cas.

Ça signifie que ça fonctionne aujourd'hui, avec certains défaut, mais que ça ne fonctionnera plus dans une prochaine version.

Si tu démarres un projet, je te conseille vivement de suivre les conseils que te donnes la page. Cela t'éviteras de devoir repenser le fonctionnement de ton appli en catastrophe lors d'une mise à jour ultérieure.


(Christophe Boucaut) #3

Mon soucis, c'est plus le nom boost.

Dans le lien que j'ai donné, on nous explique que l'on peut faire un champs qui sera ajouté au document pour jouer sur le score.

Dans mon cas, ça ajoute "boost" dans le mapping mais pas dans le document. Donc cela ne semble pas être la même chose que la fonctionnalité présentée dans le lien. Donc je ne sais pas non plus si elle est concernée par le "Deprecated" :confused:


(Jérôme Mainaud) #4

En fait, tu as deux notions:

_boost qui permet de définir un champ (le nom est précisé par l'attribut name) dont tu dois donner la valeur dans tes documents. Il te permet de définir un boost différent pour chaque document. C'est le cas que tu pointais dans la documentation. Cette fonction est obsolète et ne doit plus être utilisée.

Il y a aussi le boost d'un champ. Il donne une importance plus grande pour un champ par rapport aux autres champs. Le rapport est le même pour tous les documents. C'est l'usage de ton exemple. Le boost est fixé une fois pour toute par le mapping et la valeur n'a pas à apparaitre dans les documents. A ma connaissance, cet usage n'est pas obsolète. Il est documenté ici : https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-core-types.html#string


(Christophe Boucaut) #5

Effectivement ! c'est tout à fait ça :slight_smile: Ça me rassure du coup.

Merci beaucoup :wink:


(system) #6