2016-12-27 1 views
4

나는 Java 경험이 없으며 elasticsearch painless script language와 관련된 문제점이 있습니다. (고통받지 않는 이름은 잘 선택되지 않았습니다). 다음 코드를Elasticsearch painless script 오류

나는 오류를 얻을 :

{"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].

내가 같은 오류와 (플로트) 문서 [ 'newPrice']> 0으로 플로트로 캐스팅 묶여.

은 그 때 나는 "Double price = ((Double)doc['discountPrice'] > 0.0) ? doc['price']/doc['discountPrice'] : 0; _score * params.constant * price",

로 변경 수신 :

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

누군가가 나를 도울 수있는 오류의 유사한 종류의 변화를 많이 시도했다. 고통스러운 언어 ...

+1

당신은'.value'을 놓치고 사용해야

doc['newPrice'].value 

에서 다른 필드 값에 액세스합니다. 이것을 대신해볼 수 있습니까? double price = doc [ 'newPrice']. value> 0.0? doc [ 'price']. value/doc [ 'newPrice']. 값 : 0; _score * params.constant * price' – Val

+0

와우. 문서에서 .value는 어디에서 찾았습니까? 대답으로 추가하십시오. 맞습니다. –

+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'] 

당신은 이상이

관련 문제