如何在Elasticsearch Painless参数中检查键是否存在?

8

如何在painless脚本映射参数中检查键是否存在。

在下面的查询中,检查a.toString()键是否存在于params中。

我已经尝试了一切,但没有让它工作。

请帮助我

映射:

"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']"
            }
          }
        }
      ]
    }
  }
}
1个回答

9

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

1
谢谢,这真的帮了我很多。 - slifer2015

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接