无痛脚本映射参数中如何检查密钥。
在下面的查询中,检查a.toString()
键是否存在于参数中
我已经尝试了所有方法,但没有成功。
请帮助我
映射:
"id": {
"type": "long"
}
查询:
{
"query":{
"bool":{
"filter":[
{
"script": {
"script": {
"lang": "painless",
"params": {
"29232":2541,
"minDistance": 0
},
"source": "def a=doc['id'].getValue();double distance=params[a.toString()]; return distance <= 1000 && distance >= params['minDistance']"
}
}
}
]
}
}
}
答案 0 :(得分:3)
params
只是一个Java Map
对象。因此,以下检查key
中是否存在params
,如果不存在则以false
退出。
GET test/_search
{
"query":{
"bool":{
"filter":[
{
"script": {
"script": {
"lang": "painless",
"params": {
"29232":2541,
"minDistance": 0
},
"source": """
def a=doc['id'].getValue();
if (!params.containsKey(a.toString())) {
return false;
}
double distance=params[a.toString()];
return distance <= 1000 && distance >= params['minDistance']
"""
}
}
}
]
}
}
}