2015-12-04 239 views
1

我使用Elasticsearch,並且我有一個用Groovy編寫的腳本字段。它需要替換myField的某些值的值,但我想讓大部分值都保持不變。下面的腳本除了沒有任何字段的文檔之外都可以工作。我如何使腳本字段值爲空?Elasticsearch:從腳本字段返回空值

if (some criteria) { 
    return ...; // modified value 
} 
// This returns 0 if myField doesn't exist 
return doc['myField'].value 

我可以檢查空狀態,但我還沒有找到一種方法返回一個空值:

if (doc['myField'].empty) 
    return ??? 
+0

通過「空值」,你的意思是一個空字符串? – Val

+0

@Val不,我的意思是更像空。如果我返回null,我會得到一個異常。 – TimK

回答

0

這是完全確定返回null。我認爲這個問題更多的是測試你的不同測試條件。我試圖重現您的問題,我可以與下面的腳本返回null

"script_fields": { 
    "my_script_field": { 
     "script": "if (doc.myField.empty) { return null } else if (some criteria) { return modifiedValue } else { return doc.myField.value }" 
    } 
    } 

爲空值的字段首先檢查並返回null。 然後,你保證有非空和現有的領域。所以你可以檢查你的標準,並返回你想要的任何修改字段。 最後,您可以返回不符合您指定條件的非空字段的未修改值。

腳本是這樣的:

if (doc.myField.empty) { 
    return null 
} else if (some criteria) { 
    return modifiedValue 
} else { 
    return doc.myField.value 
}