无痛(Elasticsearch)将任何类型的值转换为整数

pmi*_*hev 6 elasticsearch elasticsearch-painless

我正在将 Elasticsearch 脚本从 Groovy 转换为 Painless。该脚本接受一个参数,该参数可以是整数或可转换为整数的字符串(即可以是123"123")。

在 Groovy 中,执行my_val.toLong()可以很好地转换两者,但该方法在 Painless 中不可用。

是否有任何替代语法可以在 Painless 中执行相同的操作?

我尝试使用(long) my_var进行显式转换,但我得到java.lang.String无法转换为 java.lang.Number

简而言之,我想在 Painless 中执行以下操作并最终实现

GET _search
{
  "script_fields": {
    "test": {
      "script": {
        "lang": "groovy",
        "params": {
          "my_val1": "123",
          "my_val2": 123
        },
        "source": """
        my_val1.toLong() == my_val2.toLong()
        """
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

pmi*_*hev 5

由于我可以看到这个问题仍然引起一些兴趣,最终我能找到的最好方法是:

Long.parseLong(params.my_val1.toString()) == Long.parseLong(params.my_val2.toString())
Run Code Online (Sandbox Code Playgroud)