如何检查弹性搜索无痛参数中是否存在键?

sli*_*015 5 elasticsearch elasticsearch-dsl elasticsearch-painless

无痛脚本映射参数中存在如何检查密钥。在下面的查询中,查询检查a.toString()键存在于参数中,我已经尝试了所有方法,但没有使它起作用。请帮我

映射:

"id": {
   "type": "long"
}
Run Code Online (Sandbox Code Playgroud)

查询:

{
  "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']"
            }
          }
        }
      ]
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

Ben*_*ent 6

params只是一个 JavaMap对象。因此,以下检查 中是否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']
               """
            }
          }
        }
      ]
    }
  }
}
Run Code Online (Sandbox Code Playgroud)