web-dev-qa-db-fra.com

Erreur de script indolore d'Elasticsearch

Je n'ai pas Java expérience et j'ai un problème avec le langage de script indolore elasticsearch. (Le nom indolore n'est pas bien choisi).

Pour le code suivant, j'obtiens l'erreur:

{"lang": "painless",
"inline": "float price = doc['newPrice'] > 0.0 ? doc['price'] / doc['newPrice'] : 0; _score * params.constant * price",
"params": {"constant": 1.2}}}}

Impossible d'appliquer l'opération [>] aux types [org.elasticsearch.index.fielddata.ScriptDocValues.Doubles] et [Java.lang.Double].

J'ai attaché pour le cast comme float avec (float) doc ['newPrice']> 0 avec la même erreur.

Ensuite, je suis passé à "Double price = ((Double)doc['discountPrice'] > 0.0) ? doc['price'] / doc['discountPrice'] : 0; _score * params.constant * price",

Et reçu:

'Impossible de caster de [Double] en [double].'

Quelqu'un peut-il m'aider, a essayé de nombreuses variantes avec des erreurs similaires. Putain de langage indolore ...

16
Alexandru R

Vous êtes simplement manque le .value pour accéder à la valeur du champ.

Votre script doit être comme ceci à la place:

double price = doc['newPrice'].value > 0.0 ? doc['price'].value / doc['newPrice'].value : 0; _score * params.constant * price
32
Val
doc['newPrice']

est différent de

doc['newPrice'].value

Vous devez utiliser la dernière version

1