2016-12-27 15 views
4

私はJavaの経験がなく、elasticsearch painless script languageに問題があります。 (痛みのない名前はよく選ばれていない)。次のコードについては弾性検索痛みのないスクリプトエラー

私はエラーを取得する:

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

Cannot apply [>] operation to types [org.elasticsearch.index.fielddata.ScriptDocValues.Doubles] and [java.lang.Double].

私は同じエラーで(フロート)DOC [ 'newPrice']> 0でfloatとしてそれをキャストする結びました。

は、その後、私は"Double price = ((Double)doc['discountPrice'] > 0.0) ? doc['price']/doc['discountPrice'] : 0; _score * params.constant * price",

に変更し、受信した:誰かが私を助けることができる

'Cannot cast from [Double] to [double].'

を、エラーの似たようなものでバリエーションの多くを試してみました。 痛みのない言語...

+1

以降を使用する必要があります

doc['newPrice'].value 

異なっている:

スクリプトは、代わりにこのようにする必要がありますフィールド値にアクセスします。代わりにこれを試すことができます: 'double price = doc ['newPrice']。value> 0.0? doc ['price']。value/doc ['newPrice']。値:0; _score * params.constant * price' – Val

+0

うわー。ドキュメントの中でどこで値を見つけましたか?答えとして追加してください。それは正しいです。 –

+0

これが記載されているドキュメントへのリンクを追加しました。 – Val

答えて

9

フィールド値にアクセスするには、単にmissing the .valueです。

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

Val、フィールドが存在するかどうかを確認する方法も知っていますので、その値を参照できますか? –

+1

'doc ['newPrice']。size()'を確認できます。 0を取得した場合は値はありません。それ以外の場合は、使用できる値があります。 – Val

0
doc['newPrice'] 

はあなたが `.value`を逃している