Безболезненное (Elasticsearch) преобразование любого типа значения в целое число

Я конвертирую скрипт Elasticsearch из Groovy в безболезненный. Сценарий принимает параметр, который может быть либо целым числом, либо строкой, преобразуемой в целое число (т. е. может быть либо 123, либо "123").

В Groovy выполнение my_val.toLong() прекрасно конвертировало оба варианта, но этот метод недоступен в Painless.

Есть ли какой-нибудь альтернативный синтаксис, который делал бы то же самое в Painless?

Я попытался выполнить явное приведение с помощью (long) my_var, но получаю сообщение java.lang.String нельзя преобразовать в java.lang.Number.

Вкратце, я хочу сделать в Painless следующее и получить в результате true:

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

person pmishev    schedule 10.04.2018    source источник


Ответы (1)


Поскольку я вижу, что этот вопрос все еще вызывает интерес, в конце концов, лучший способ, который я мог бы найти, это:

Long.parseLong(params.my_val1.toString()) == Long.parseLong(params.my_val2.toString())
person pmishev    schedule 26.06.2020