2017-02-17 3 views
1

J'ai un champ dans le document qui est un classement: plus la valeur est basse, plus le score devrait être élevé. Être le premier est le meilleur, mais être le dernier est le pire. Donc un classement de 1 vaut mieux qu'un million.Dans Elasticsearch, comment augmenter un score par la valeur d'un champ de classement (1er, 2ème, 3ème ...)?

Jusqu'ici, j'ai pu augmenter la valeur du champ lui-même avec score_query and field_value_factor, mais cela donne aux docs avec des rangs de nombres plus élevés les boosts les plus élevés.

"field_value_factor": { 
    "field": "rank", 
    "factor": 1.2, 
    "modifier": "sqrt", 
    "missing": 1 
} 

Dois-je utiliser un modificateur différent? Ou vais-je complètement à ce sujet? En outre, je ne veux pas trier tout seul puisque j'ai d'autres facteurs influençant le _score.

+0

il ne semble pas être quelque chose à cette question liée à [Boost C++ bibliothèques] (http://stackoverflow.com/tags/boost/info) - s'il vous plaît ne pas abuser des balises . (En tant que personne qui fréquente ce site depuis plus de 7 ans, vous devriez le savoir maintenant) –

+0

Oups, j'ai été heureux là-bas. Désolé pour ça. Été un moment depuis que j'ai posé une question cependant. Merci d'avoir attrapé ça, @ DanMašek – JayNCoke

+0

Pas de soucis, ça peut arriver :) C'était en fait assez drôle de voir que sur quelque chose étiqueté avec "pertinence": D –

Répondre

1

Vous devez vraiment prendre une fonction de modificateur qui se déplace alternativement la valeur rank, c.-à-1/rank, de sorte que le rang est plus élevé, plus la valeur sera la volonté et la rank = 1 obtiendra un score de 1. Le seul qui fait il est reciprocal

"field_value_factor": { 
    "field": "rank", 
    "factor": 1.2, 
    "modifier": "reciprocal", 
    "missing": 1 
} 
+0

Ahhh ouais ça a du sens. Merci! – JayNCoke