Elasticsearch Painless: ошибка при использовании трех кавычек: неожиданный символ ('\ "' (код 34)) - PullRequest
0 голосов
/ 01 мая 2019

Я использую локальный экземпляр Elasticsearch и пытаюсь работать с «безболезненно» в scripted_fields.Я могу написать одну строку кода сценария просто отлично, но когда я использую тройные кавычки (которые поддерживаются в соответствии с документацией) для создания многострочного сценария, это вызывает странную ошибку синтаксического анализа.

Выполнениеотлично работает одна строка скрипта:

{
  "script_fields": {
    "scripted": {
      "script": {
        "lang": "painless",
        "source": "0"
      }
    }
  }
}

С таким результатом (ожидаемым) для каждой сущности, возвращаемым в результатах:

"fields" : {
  "scripted" : [
    0
  ]
}

Но с использованием многострочного формата:

{
  "script_fields": {
    "scripted": {
      "script": {
        "lang": "painless",
        "source": 
        """
          0
        """
      }
    }
  }
}

Дает мне эту ошибку:

Unexpected character ('\"' (code 34)): was expecting comma to separate Object entries\n at [Source: org.elasticsearch.transport.netty4.ByteBufStreamInput@56e69b76; line: 7, column: 12]

Есть идеи?

1 Ответ

0 голосов
/ 02 мая 2019

Мне удалось отработать решение для Почтальона (по крайней мере).Вы не можете использовать многострочные строки в теле JSON почтальона, поэтому используйте сценарий предварительного запроса.Вот пример:

pm.environment.set("painless_script",`\
    return 0\
`);

Примечания:

  • Используйте 'галочки', чтобы обернуть скрипт
  • Вы должны экранировать конец каждой строки, иначе безболезненнобудет жаловаться.

Тогда в теле сообщения:

{
  "script_fields": {
    "scripted": {
      "script": {
        "lang": "painless",
        "source": "{{painless_script}}"
      }
    }
  }
}

Это дает правильный результат из Elasticsearch

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...