Elasticsearch Painless:使用三个引号时出错:意外字符('\"'(代码 34))

Jer*_*my 7 elasticsearch elasticsearch-painless

我正在运行 Elasticsearch 的本地实例,并尝试在 scripted_fields 下使用“无痛”。我可以很好地编写一行脚本代码,但是当我使用三引号(根据文档支持)创建多行脚本时,它给了我这个奇怪的解析错误。

运行单行脚本效果很好:

{
  "script_fields": {
    "scripted": {
      "script": {
        "lang": "painless",
        "source": "0"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

结果中返回的每个实体中的结果(预期)如下:

"fields" : {
  "scripted" : [
    0
  ]
}
Run Code Online (Sandbox Code Playgroud)

但使用多行格式:

{
  "script_fields": {
    "scripted": {
      "script": {
        "lang": "painless",
        "source": 
        """
          0
        """
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

给我这个错误:

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

有任何想法吗?

Jer*_*my 7

我能够为邮差找到一个解决方案(至少)。您不能在邮递员正文 JSON 中使用多行字符串,因此请使用预请求脚本。这是一个例子:

pm.environment.set("painless_script",`\
    return 0\
`);
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 使用“ticks”来包装脚本
  • 你必须转义每一行的结尾,否则 Painless 会抱怨。

然后在消息正文中:

{
  "script_fields": {
    "scripted": {
      "script": {
        "lang": "painless",
        "source": "{{painless_script}}"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

这会从 Elasticsearch 中产生正确的结果