2017-02-17 48 views
0

我寫了使用Groovy語言(datediff.groovy)這個腳本:ElasticSearch:Groovy腳本無痛

(doc[secondDateField].date.millis - doc[firstDateField].date.millis)/3600000 

它工作正常。不過,我打算將這些腳本移至painlessdatediff.painless)。不過,我對straup獲得編譯錯誤:

[esn1] failed to load/compile script [datediff]: { 
    "type" : "script_exception", 
    "reason" : "compile error", 
    "caused_by" : { 
    "type" : "illegal_argument_exception", 
    "reason" : "Variable [secondDateField] is not defined." 
    }, 
    "script_stack" : [ 
    "(doc[secondDateField].date.mil ...", 
    "  ^---- HERE" 
    ], 
    "script" : "(doc[secondDateField].date.millis - doc[firstDateField].date.millis)/3600000", 
    "lang" : "painless" 
} 

它告訴我secondDateField沒有定義。你能幫我解決嗎?

secondDateField不是名爲secondDateField的字段。這是一個腳本參數(如firstDateField),並且doc [參數]應該訪問parameter內容中設置的字段。如果secondDateField = "fieldOne"doc[secondDateField] => doc["fieldOne"] ...

回答

0

您的查詢應該是這樣的Painless,如果你想將它轉換成毫秒也是你之前和名後錯過了單引號'恐怕:

(doc['secondDateField'].date.millisOfSecond - doc['firstDateField'].date.millisOfSecond)/3600000 

米利斯應該已經爲毫秒按照該Lucene Date Api

希望這會有所幫助!

+0

'secondDateField'不是名爲'secondDateField'的字段。這是一個參數化腳本,它接收兩個參數,doc應該訪問'secondDateField'中設置的字段。如果'secondDateField =「fieldOne」','doc [secondDateField] => doc [「fieldOne」]' – Jordi

+0

不知道如何無痛處理參數化腳本。對於那個很抱歉! – Kulasangar