【问题标题】:how to check for key exist in elastic-search painless parameters?如何检查弹性搜索无痛参数中是否存在密钥?
【发布时间】:2019-11-12 00:17:59
【问题描述】:

如何检查无痛脚本映射参数中是否存在密钥。 在下面的查询中检查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']"
            }
          }
        }
      ]
    }
  }
}

【问题讨论】:

    标签: elasticsearch elasticsearch-dsl elasticsearch-painless


    【解决方案1】:

    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']
                   """
                }
              }
            }
          ]
        }
      }
    }
    

    【讨论】:

    • 谢谢,对我很有帮助
    猜你喜欢
    • 2019-12-22
    • 2022-06-19
    • 1970-01-01
    • 2013-07-03
    • 1970-01-01
    • 2019-05-14
    • 2018-07-17
    • 2020-08-19
    相关资源
    最近更新 更多