Elasticsearch 2.2 Groovy脚本如何校验params键存在 无值时返回null
解决方案
Elasticsearch 2.x版本的Groovy脚本执行环境中,直接引用未定义的参数变量会直接抛出missing_property_exception异常,不会自动返回null。你可以通过显式调用params内置Map对象的get()方法来避免这个问题,该方法在key不存在时会默认返回null,不会触发异常。
修改后的脚本示例
"aggs": { "countries": { "terms": { "script": { "params": { "field1": "country", "field2": "test", "field3": "test" }, "inline": "def syn = params.get('field4'); if (syn == null) return doc[params.field1].value; return syn;" } } } }
关键点说明
- 所有参数统一从
params内置对象中显式获取,不要直接写参数名作为变量 params.get('参数名'):如果params中存在对应key则返回值,不存在则返回null,不会抛出异常- 原代码中
doc[country].value的写法也存在问题,需要改为doc[params.field1].value,否则会因为找不到country变量抛出同样的缺失属性异常
内容的提问来源于stack exchange,提问作者nkhcode
相关产品推荐
相关产品推荐

