2015-12-04 251 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 
}