如果沒有對應的值,有沒有辦法回傳null?
示例)由于 params 沒有 field4 值,我希望將空值回傳給 syn 變數。
"aggs": {
"countries": {
"terms": {
"script": {
"params": {
"field1": "country",
"field2": "test",
"field3": "test"
},
"inline": "def syn = field4; if (syn == null) doc[country].value;"
}
}
}
}
目前,如果沒有相應的值,總是會發生錯誤。
"caused_by": {
"type": "missing_property_exception",
"reason": "No such property: field1 for class: e5ce2464b456f9c0fa360269abc927e65998ecf7"
}
我正在使用 groovy 和 elasticsearch 2.2 版
我不能使用 Python 或 JavaScript,這需要安裝額外的插件。
如果沒有值,如何在不導致錯誤的情況下獲得空值?
謝謝
uj5u.com熱心網友回復:
您有一個布林值empty,該值指示您檔案是否具有這樣的欄位。
所以你應該這樣做
"inline": "def syn = field4 ?: 'dummy'; return (doc[syn].empty) ? null : doc[syn].value;"
更新:如果我們知道腳本類名,那么在 Groovy 中檢測丟失的引數變數是微不足道的。但是由于腳本類是動態創建的(例如e5ce2464b456f9c0fa360269abc927e65998ecf7),它使該程序一點也不微不足道。繞過這個的一種方法是在你的代碼周圍添加一個 try/catch 塊,這樣代碼可能會失敗,但至少我們可以捕獲它,基本上是這樣的:
"inline": "try { def syn = field4; return (doc[syn].empty) ? null : doc[syn].value; } catch (e) { return null } "
但是,ES在 2.2 中為腳本撰寫引入了一些安全加固和類白名單。實作此目的的一種方法是將檔案中的一些例外類列入白名單.java.policy,如下所示:
grant {
permission org.elasticsearch.script.ClassPermission "java.lang.Throwable";
permission org.elasticsearch.script.ClassPermission "java.lang.Exception";
permission org.elasticsearch.script.ClassPermission "groovy.lang.GroovyException";
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/375329.html
標籤:弹性搜索 时髦的 弹性搜索聚合 elasticsearch-dsl
